8

編集:将来この投稿を見る人にとって、このサイトは私がJavascriptを理解するのに間違いなく重要でした. あなたが伝統的な OOP のバックグラウンドを持っているなら、私はそれを強くお勧めします。UML 風のダイアグラムは素晴らしかったです。

Javascript の .prototype プロパティが何であるかについて、私はまだ理解できません。それは単に別のオブジェクトへの参照ですか?それとも、別のオブジェクトへのポインタへの参照ですか? 私は C/C++/x86 から来ましたが、それがどのように機能するかわかりません。私が現在物事をどのように見ているかの例をいくつか見てみましょう。エラーを指摘して、物事がどのように機能するかを確認するのに役立ちます。これらのいくつかが有効な構文であるかどうかさえわかりません。ObjectおよびFunctionは、それぞれグローバル オブジェクト/関数オブジェクトです。

1                                        // Global.prototype = ??
2                                        // Function.prototype = ??
3 
4   var obj1 = {};                       // obj1.prototype = Object 
5   obj2 = {};                           // obj2.prototype = Object
6
7   var func1 = function() {};           // func1.prototype = Function
8   func2 = function() {};               // func2.prototype = Function
9   function func3() {}                  // func3.prototype = Function  
10

私は困惑している。

11  var Foo = function() { this.prop1 = 0; }
12  var foo = new Foo();                 // should it be 'new Foo' or 'new Foo()'?
13  // Foo.prototype = Function
14  // foo.prototype = Foo
15  var Goo = function() { this.prop2 = 0; }
16  var goo = new Goo();
17  // goo.prototype = Goo
18  goo.prototype = new Foo();
19  // goo.prop1 now exists ?

また、プロトタイプを交換することも理解していません。

20  function A () {
21     this.prop1 = 1;
22  }
23  function B () {
24     this.prop2 = 2;
25  }
26  function C () {
27     this.prop3 = 3;
28  }
29  C.prototype = new B();
30  var c = new C();
31  // c.prop1 = 1
32  // c.prop2 = 2
33  // c.prop3 = undefined
34  C.prototype = new A();
35  // c.prop2 = 2???
36  // c.prop3 = 3

コンセプトが掴めない。よくわかりません。複製されたオブジェクトがデータの独自のローカル コピーを取得する方法はわかりませんが、元のオブジェクト (プロトタイプ) への変更が何らかの形で複製にカスケードされます。FigureBug をいじっていろいろ試してみたのですが、頭の中で見たすべての例と一致するアイデアを思いつくことができませんでした

C++ は巨大な怪物かもしれませんが、少なくとも何が起こっているかを正確に知っています。ここで...私は私の最善の推測を使用しています..私が推測する新しいパラダイムです。とにかく、助けていただければありがたいです...私はこの.prototypeで逆さまになっています。

4

2 に答える 2

2

プロトタイプは、オブジェクト自体にプロパティが定義されていない場合、読み取り中にプロパティを検索するために使用されます。書き込みは常にオブジェクト自体で行われます

電話すると

// An instance of Foo ({prop1:0}) is set as the 
// prototype (to all instances of Goo)
var goo = new Goo();

// 0, from the prototype
console.log(goo.prop1); 

// Read from the object itself (set in Goo's constructor)
console.log(goo.prop2); 

// New instance, same prototype as goo
var goo2 = new Goo();
console.log(goo2.prop1) ; // 0, still from the prototype

// Setting is always at the object level, not the prototype
goo.prop1 = 5;

// goo2 is still reading from the prototype
console.log(goo2.prop1); 

注意

継承を設定するためだけに親クラスをインスタンス化しないでください。ここで理由を参照してくださいhttp://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html

于 2013-07-15T17:36:22.393 に答える