プロトタイプ関数の下にネストされた関数は、プロトタイプ用に定義された this.variables を取得しません。
var Person, p;
Person = function(name, age) {
this.name = name;
this.age = age;
};
Person.prototype.getInfo = function() {
var innerFun;
innerFun = function() {
return this.name;
};
return "name: " + (innerFun()) + " age: " + this.age;
};
p = new Person('dork', 99);
console.log(p.getInfo()); // name: age: 99
すべての関数はオブジェクトであるため、これはすべての関数定義内で異なると思いました。しかし、次のコードはそのロジックを吹き飛ばします。
var getInfo;
getInfo = function() {
var display;
this.name = 'dork';
return display = function() {
return this.name;
};
};
console.log(getInfo()()); // dork
この動作の背後にあるロジックはありますか、それとも原則としてこの問題を回避するために call() を使用する必要がありますか?