javascript – 保罗爱尔兰’鸭子冲孔’模式观察

前端之家收集整理的这篇文章主要介绍了javascript – 保罗爱尔兰’鸭子冲孔’模式观察前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

有一个关于我最初在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);
最佳答案
考虑这个例子

var 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按预期工作很重要.

原文链接:https://www.f2er.com/jquery/428537.html

猜你在找的jQuery相关文章