谁能向我解释为什么“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())