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)プロトタイプで動作させることができない場合、その理由は何ですか?問題の根底をよりよく理解できます。