1
example = {};

example.Math = {
  sin: function() {console.log('sin');},
  cos: function() {console.log('cos');}
};

foo = function(){
   sin(); 
};
foo.prototype = window.example.Math;

console.log(foo.prototype)
console.log(foo.cos)
console.log(foo())

http://jsfiddle.net/Mubqy/9/

私が理解したことから、参照はスコープチェーンを介して検索されます。したがって、理論的には、プロトタイプに関数が定義されたオブジェクトを割り当てる場合、オブジェクトのそれらの関数とフィールドをすべて取得する必要があると思いました。私の理解の誤りはどこにありますか?上記のシナリオはどちらも機能しません。さらに、内部proto変数は更新されていません。明らかにそれが機能しない理由ですが、プロトタイプへの割り当てが機能しないのはなぜですか?

4

2 に答える 2

4

newプロトタイプ化されたメソッドはキーワードを使用して実行する必要がthisあり、次のように変数とメソッドにアクセスするために使用する必要があることを理解する必要があると思います。

example = {};

example.Math = {
  sin: function() {console.log('sin');},
  cos: function() {console.log('cos');}
};

foo = function(){
   this.sin(); 
};
foo.prototype = window.example.Math;

console.log(foo.prototype)
console.log(foo.cos)
console.log(new foo())
于 2013-01-15T00:10:42.473 に答える
2

プロトタイプの2つの非常に重要な側面を見逃しました。

  • プロトタイプはオブジェクトの親として機能します
  • オブジェクトのインスタンスを開始する必要があります

まず、キーワードthisを使用して、オブジェクトのメソッドと変数にアクセスします。

var foo = function(){
   this.sin(); 
};

キーワードを使用してオブジェクトのインスタンスを開始するよりもnew

new foo();

OOPと同じように、そうではありません:)

http://jsfiddle.net/46fPe/

于 2013-01-15T00:10:35.237 に答える