JS:优良部件:上级功能

时间:2018-08-06 07:33:46

标签: javascript javascript-objects

我试图理解道格拉斯·克罗克福德(Douglas Crockford)的“ Javascript:好的部分”第1章“好的部分”中关于继承的示例。特别是superior函数。书中内容如下:

Object.method('superior', function(name) {

  var that = this, method = that[name];
  return function() {
    // Why can’t this just be `return method`?
    return method.apply(that, arguments);
  };
});

如上面的代码注释中所述,我不明白为什么在简单返回函数本身似乎可以在我的实验中找到的情况下为什么需要使用apply

补充信息

上面使用的method函数定义为

Function.prototype.method = function(name, func) {
  this.prototype[name] = func;
  return this;
};

1 个答案:

答案 0 :(得分:1)

这确实是一种复杂的处理方式。一个可能的优点是,生成的函数将自动绑定到初始this上下文(即您随后可以调用它而不必引用该实例)。

我想以下实现将更清楚地揭示其意图:

Object.method("superior", function(name) {
    var that = this, method = that[name];
    return method.bind(that);
});

(由于下一个coolcat方法未使用get_name上下文,因此这种可能的优势在下一页的this示例中并不直接明显。)