您有问题,因为this
in与外部功能method1()
不同this
。那是因为在 JS 函数中创建了作用域。
第一种方法
所以你可能想a
成为一个变量,而不是一个属性this
:
createObject = function() {
// 'a' is now available here...
var a = 1
this.method1 = function() {
// ... and here as well.
if (a == 1 ) {
a = 0
}
}
}
第二种方法
或者,您可能希望this
在辅助变量中保存对外部的引用(self
在此示例中调用):
createObject = function() {
// 'self' is a regular varialbe, referencing 'this'
var self = this;
this.a = 1
this.method1 = function() {
// Here, self !== this, because 'this' in method1()
// is different from 'this' in outer function.
// So we can access 'self.a':
if (self.a == 1 ) {
//do stuff
self.a = 0
}
}
}
第三种方法
最后,您还可以使用bind()
将外部绑定this
到您的method1()
:
var createObject = function () {
this.a = 1
this.method1 = function () {
console.log(this.a);
if (this.a == 1) {
this.a = 0
}
}.bind(this);
// ^ note `bind(this)` above. Now, 'this' inside 'method1'
// is same as 'this' in outer function.
}
这是bind()
. 请注意,它在 IE < 9 中不可用。