我采取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块内它的意义,但我不知道。 任何帮助,将不胜感激!
你需要指定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(){}
});
的.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(){}
});
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]