所以我想说我有这段代码:
MyClass = {
classVar1: 'Teddy Bear',
classVar2: 'Boogy Man',
firstMethod: function() {
console.log('I love my' + this.classVar1); // works
setTimeout(function() {
console.log('But I hate the ' + this.classVar2); // does not work
}, 2000);
someElement.addEventListener('click', function() {
console.log('I also hate the ' + this.classVar2); // also does not work
});
}
};
MyClass.firstMethod();
因为firstMethod
内部存在嵌套函数,所以无法访问第二个类变量。我该如何解决这个问题?
答案 0 :(得分:4)
您可以使用bind
强制this
值正确无误:
setTimeout((function() {
console.log('But I hate the ' + this.classVar2);
}).bind(this), 2000);
或者,您可以捕获变量中的原始this
值:
var that = this;
setTimeout(function() {
console.log('But I hate the ' + that.classVar2);
}, 2000);
答案 1 :(得分:1)
您可以存储对父this
的引用;
firstMethod: function() {
var _this = this;
console.log('I love my' + this.classVar1);
setTimeout(function() {
console.log('But I hate the ' + _this.classVar2);
}, 2000);
someElement.addEventListener('click', function() {
console.log('I also hate the ' + _this.classVar2);
});
}
答案 2 :(得分:1)
你在这里创建的是一个javascript对象,而不是一个类。为了创建一个类,你需要做这样的事情:
var MyClass = function() {
var self = this; // Create a local variable that stores a pointer to 'this'
this.classVar1 = 'Teddy Bear';
this.classVar2 = 'Boogy Man';
this.firstMethod = function() {
console.log('I love my' + self.classVar1); // use self instead of this
setTimeout(function() {
console.log('But I hate the ' + self.classVar2); // use self instead of this
}, 2000);
someElement.addEventListener('click', function() {
console.log('I also hate the ' + self.classVar2); // use self instead of this
});
}
};
然后使用上面的类创建一个这样的对象:
var myObject = new MyClass();
myObject.firstMethod();
希望这有帮助。
答案 3 :(得分:0)
要在您自己的班级中引用您的变量,您只需
Class={
classvar:'x'
function myfunction(){
return this.classvar;
}
}
Class.myfunction(); // should return x
应该足够this.variable来访问类或对象中的方法中的全局变量