All files / mvc proxy.js

100% Statements 15/15
90% Branches 9/10
100% Functions 2/2
100% Lines 15/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                    1x   1x     80x 58x   80x 80x 80x 80x 80x 74x 41x 41x 41x       80x     1x  
/**
 * 函数代理,确保函数在当前类创建的实例上下文中执行。
 * - 这些用于绑定事件的代理函数都放在属性 instance.bound 上。
 * - 功能类似 Function.prototype.bind 。
 * - 可以传递额外参数作为函数执行的默认参数,追加在实际参数之后。
 * @method mvc/proxy
 * @param {object} instance 对象实例
 * @param {string} [name='proxy'] 函数名称
 */
 
var $type = require('../obj/type');
 
var AP = Array.prototype;
 
function proxy(instance, name, proxyArgs) {
  if (!instance.bound) {
    instance.bound = {};
  }
  var bound = instance.bound;
  proxyArgs = proxyArgs || [];
  proxyArgs.shift();
  name = name || 'proxy';
  if ($type(bound[name]) !== 'function') {
    bound[name] = function () {
      Eif ($type(instance[name]) === 'function') {
        var args = AP.slice.call(arguments);
        return instance[name].apply(instance, args.concat(proxyArgs));
      }
    };
  }
  return bound[name];
}
 
module.exports = proxy;