JS:好的部分:"superior"函数



我试图理解Douglas Crockford的"Javascript:The Good Parts",第1章"Good Part"中关于继承的一个例子。特别是CCD_ 1函数。在书中是这样的:

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;
};

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

我想下面的实施会更清楚地揭示意图:

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

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

最新更新