in は外部関数とは異なるためthis
、問題があります。これは、JS 関数がスコープを作成するためです。method1()
this
最初のアプローチ
a
したがって、のプロパティではなく、変数になりたい場合がありthis
ます。
createObject = function() {
// 'a' is now available here...
var a = 1
this.method1 = function() {
// ... and here as well.
if (a == 1 ) {
a = 0
}
}
}
2 番目のアプローチ
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
}
}
}
3 番目のアプローチ
最後に、bind()
outer を次のように結び付けるために使用することもでき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 では使用できないことに注意してください。