有一个关于我最初在Paul Irish博客上遇到的’鸭子打孔’模式的问题.我得到一般的前提……将ref保存到现有函数,然后用条件分支替换现有函数,如果满足条件则调用新函数,否则替换旧版本.我的问题是,当我们调用_old函数时,为什么我们必须使用’apply’和’this’作为第一个参数?我理解申请是如何运作的,但我正在寻找一些有关为何必要的澄清.
(function($){
// store original reference to the method
var _old = $.fn.method;
$.fn.method = function(arg1,arg2){
if ( ... condition ... ) {
return ....
} else { // do the default
return _old.apply(this,arguments);
}
};
})(jQuery);
最佳答案
考虑这个例子
原文链接:https://www.f2er.com/jquery/428537.htmlvar obj = {
foo: "bar",baz: function () {
return this.foo;
}
};
o = obj.baz;
obj.baz(); // "bar"
o(); // undefined
如果用obj.baz调用方法,则点后面的对象是函数的上下文(这将引用此对象).
如果将方法存储在变量中,则会丢失有关上下文的信息.在这种情况下,上下文将设置为全局对象.
var obj = {
baz: function () {
return this;
}
};
o = obj.baz;
obj.baz() === obj; // true
o() === obj; // false
o() === window; // true
适当的上下文可能对于.method按预期工作很重要.