我真的打败了这个人。我无法弄清楚javascript的绑定是如何工作的。在我班级的构造函数中,我设置var self = this;
,我认为这将永远给我一个绝对的实例引用。然而,这似乎并非如此。
以下是我班级的主要结构。
var MyClass = (function() {
function MyClass(data) {
var self = this;
this._element = $('.someSelector');
}
MyClass.prototype.styleIt = function() {
self._element.css('display', 'block');
}
return MyClass;
})();
在另一个包含MyClass
实例的类中,我调用styleIt
函数如下:
Class2:
...
$('#id').click(function(evt) {
evt.preventDefault();
for (int i = 0; i < self._objects.length; i++) {
[i].styleIt();
}
}
然而,令我感到困惑的是self
styleIt
window
内的{{1}}!这里发生了什么?
答案 0 :(得分:0)
self
在内部MyClass
函数内部定义,因此仅在该范围内可见。您的styleIt方法未在该范围内定义,因此无法查看self
变量。
如果你希望你的方法是自引用的(例如不依赖于this
),那么你必须在构造函数中定义方法(而不是在原型上),这样他们就可以看到{{1}变量。
以下是一种方法:
self
在您的代码中调用var MyClass = (function() {
function MyClass(data) {
var self = this;
this._element = $('.someSelector');
this.styleIt = function() {
self._element.css('display', 'block');
return self;
}
}
})();
,如下所示:
styleIt()
这段代码根本不正确(两个编码错误),不应该需要上面的自引用功能。这段代码可以像这样完成:
$('#id').click(function(evt) {
evt.preventDefault();
for (int i = 0; i < self._objects.length; i++) {
[i].styleIt();
}
}
使用$('#id').click(function(evt) {
evt.preventDefault();
for (var i = 0; i < self._objects.length; i++) {
self._objects[i].styleIt();
}
}
obj.method()
调用方法时,会在方法内设置为this
,因此您不需要obj
功能self
1}}方法。您可以依赖styleIt()
。