gpt4 book ai didi

javascript - Paul Irish 'duck punching' 模式观察

转载 作者:数据小太阳 更新时间:2023-10-29 05:56:08 25 4
gpt4 key购买 nike

我对我在 Paul Irish 的博客上第一次遇到的“打鸭子”模式有疑问。我得到了一般前提...将引用保存到现有函数,然后用条件分支替换现有函数,如果满足条件,则调用新函数,否则调用旧版本。我的问题是为什么我们在调用 _old 函数时必须使用带有“this”的“apply”作为第一个参数?我了解 apply 的工作原理,但我正在寻找一些关于为什么有必要的说明。

(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);

最佳答案

考虑这个例子

var obj = {
foo: "bar",
baz: function () {
return this.foo;
}
};
o = obj.baz;
obj.baz(); // "bar"
o(); // undefined

如果您使用 obj.baz 调用方法,则点后面的对象是函数的上下文(this 将引用此对象)。如果将方法存储在变量中,则会丢失有关上下文的信息。在这种情况下,上下文将设置为全局对象。

var obj = {
baz: function () {
return this;
}
};
o = obj.baz;
obj.baz() === obj; // true
o() === obj; // false
o() === window; // true

适当的上下文对于 .method 按预期工作可能很重要。

关于javascript - Paul Irish 'duck punching' 模式观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com