我试图了解 javascript 传递函数的方式,并且在思考为什么原型函数不能访问函数构造函数中定义的 var 而构造函数中定义的函数可以访问 var 时遇到了一些问题。这是有效的代码:
var model = function model() {
this.state = 1;
this.GetState = (function(scope){
return function(){ return scope.state;};
})(this);
}
var othermodel = function othermodel(mdl) {
this.GetStateFn = mdl.GetState;
}
othermodel.prototype.WriteState = function() {
console.log(this.GetStateFn.call());
};
var m = new model();
var o = new othermodel(m)
o.WriteState();
这有效且有意义 - GetState() 函数可以访问 this.state。
但是,如果我按如下方式创建 GetState:
model.prototype.GetState = (function(scope){
return function(){ return scope.state;};
})(this);
结果将是未定义范围的错误。
我更喜欢使用原型方法进行这项工作,因为我不希望在任何模型中复制该函数,但原型似乎无法工作,因为它无法访问模型的特定实例。
那么,有人可以为我提供一个很好的解释:a)我需要做什么才能让它与原型一起使用(假设我可以)和b)如果我不能让它与原型一起使用,那么原因是什么我可以更好地理解问题的基础。