我试图理解道格拉斯·克罗克福德(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;
};
答案 0 :(得分:1)
这确实是一种复杂的处理方式。一个可能的优点是,生成的函数将自动绑定到初始this
上下文(即您随后可以调用它而不必引用该实例)。
我想以下实现将更清楚地揭示其意图:
Object.method("superior", function(name) {
var that = this, method = that[name];
return method.bind(that);
});
(由于下一个coolcat
方法未使用get_name
上下文,因此这种可能的优势在下一页的this
示例中并不直接明显。)