1

次の 2 つのコード ブロックを別々に実行しようとすると、最初の 1 つ:

function Hallo() {

}
var some_obj = {
    name: "Fred",
    age: 23,
}
Hallo.prototype = some_obj;
var obj = new Hallo();
obj.constructor;

そして2番目のもの:

 function Hallo() {

    }
    Hallo.prototype.name = 'Khanh';
    Hallo.prototype.age = 23;
    var obj = new Hallo();
    obj.constructor;

Firebug のコンソールで結果が得られました。最初は「Object{}」、2 番目は「Hallo()」です。2 番目のものは非常に簡単に理解できますが、最初のものは非常に奇妙です。私が知っているように、最初のオブジェクトの obj オブジェクトのコンストラクターは同じです (つまり、Hallo() 関数)。ただし、結果として Object() 関数を取得しました。理由が本当にわかりません。手伝ってくれませんか?ありがとうございました!

4

2 に答える 2

2

その理由は:

するとvar obj = new Hallo();

console.log(obj.constructor === Hallo.prototype.constructor); // true

最初の例では、関数( )Hallo.prototypeである新しいオブジェクトを割り当てました。constructorObjectfunction Object(){...}

あなたの2番目の例では、Hallo.prototype.constructorまだですfunction Hallo() {...}

于 2012-10-17T03:05:46.577 に答える
1

プロトタイプは、デフォルトでコンストラクターを指す参照を取得します。プロトタイプをsome_objに上書きする最初の関数では、コンストラクター参照は同時にsome_objのコンストラクター参照--ObjectのコンストラクターObject()に変更されます。

于 2012-10-17T03:04:46.703 に答える