代码之家  ›  专栏  ›  技术社区  ›  Maxim Gershkovich

自定义方法中的jQuery“this”关键字

  •  0
  • Maxim Gershkovich  · 技术社区  · 14 年前

    在很多情况下,我都看到了jQuery如何修改this关键字来给出您期望的对象的伟大之处。伟大的。。。。

    但是,如果您有自定义对象,这些对象具有引用此关键字但通过jQuery调用的自定义方法,则如何处理这种情况。

    例如:

    var myCustomObject = {
    
        myCustomValue: 1,
    
        myCustomMethod: function () {
            switch (this.myCustomValue) {
                case ....
            }
        }
    
    };
    

    如果使用jQuery回调调用,则“this”现在是jQuery“context”,显然返回未定义的myCustomValue。

    我注意到我可以直接引用实例,比如

    switch (myCustomObject.myCustomValue) {}
    

    但这似乎令人恼火的冗长,我想知道是否有任何意外的副作用可能是由这个。。。

    对于这种情况,什么是最佳实践?

    2 回复  |  直到 9 年前
        1
  •  6
  •   Matthew Flaschen    14 年前

    如果不必公开:

    var myCustomObject = new (function()
    {
        var myCustomValue = 1;
        this.myCustomMethod = function () {
            switch (myCustomValue) {
    
            }
        }
    })();
    

    如果是的话:

    var myCustomObject = new (function()
    {
        this.myCustomValue = 1;
        var self = this;
        this.myCustomMethod = function () {
            switch (self.myCustomValue) {
    
            }
        }
    })();
    

    self 你想叫什么就叫什么。

        2
  •  2
  •   icktoofay pcp    14 年前

    如果有这样的函数,可以保持相同的语法:

    function patchThis(obj) {
        function patchFunction(orig) {
            return function() {
                return orig.apply(obj, arguments);
            };
        }
        for(var i in obj) {
            if(obj.hasOwnProperty(i)&&typeof obj[i]=="function") {
                obj[i]=patchFunction(obj[i]);
            }
        }
    }
    

    那就打电话 patchThis myCustomObject .

    你可以看到一个例子 here .