「b」が未定義を返す理由と、この問題を回避する方法を誰かに説明してもらえますか? 参照によってプロトタイプ関数を呼び出すと、「this」スコープが失われるのはなぜですか?
MyClass = function(test) {
this.test = test;
}
MyClass.prototype.myfunc = function() {
return this.test;
}
var a = new MyClass('asd').myfunc();
var b = new MyClass('asd').myfunc;
// Returns "asd" correctly
console.log(a)
// Returns undefined??
console.log(b())
===編集/解決策===
plalx が書いているように、私の場合の正しい解決策は .bind() を使用することです。したがって、結果は次のようになります。
MyClass = function(test) {
this.test = test;
}
MyClass.prototype.myfunc = function() {
return this.test;
}
var a = new MyClass('asd').myfunc();
var b = new MyClass('asd'),
bfunc = b.myfunc.bind(b)
// Returns "asd" correctly
console.log(a)
// Also returns "asd" correctly!
console.log(bfunc())