我怎样才能保持在jQuery的延伸,当这个关键字原型控制? [重复](How can I mai

2019-07-31 23:33发布

这个问题已经在这里有一个答案:

  • 如何访问正确的`this`回调里面? 10个回答

我采取jQuery的一类状结构,但我遇到了一些麻烦,当我尝试打电话给我的一些功能。

这是结构如何设置:

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        $('.myclass').each(function(){
            this.myFunction(); // doesn't work
        });
    },
    myFunction = function(){}
});

我遇到的问题是,当我尝试调用我的函数(例如, myFunction()从一个jQuery块(如内部each()构建以上),我得到的错误“ myFunction() is not a function “。

我觉得这事做与this关键字改变了jQuery块内它的意义,但我不知道。 任何帮助,将不胜感激!

Answer 1:

你需要指定this ,因为范围是如何工作的另一个变量。

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        var that = this;
        $('.myclass').each(function(){
                this.myFunction(); // doesn't work
                that.myFunction(); // should work
        });
    },
    myFunction = function(){}
});


Answer 2:

.each()函数改变的上下文中this (一样任何功能在JavaScript)。

你需要做的是这样的:

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        var myClass = this;
        $('.myclass').each(function(){
                myClass.myFunction(); // doesn't work
        });
    },
    myFunction = function(){}
});


Answer 3:

MyClass = function(name) {
    this.init(name);
}
$.extend(MyClass.prototype, {
    init: function(theName) {
        this.myFunction(); // works
        temp = this;
        $('.myclass').each(function(){
                temp.myFunction(); // works
        });
    },
    myFunction = function(){}
});

尝试。 :)



文章来源: How can I maintain control of the this keyword when extending prototypes in jQuery? [duplicate]