1

私の知る限り、以下の 2 番目のケースは正しいはずですが、実際には間違っています。では、なぜそれが正しくないのでしょうか。

ケース1

     var P = function(){};
         P.prototype.get = function(){};

    var p = new P,q = new P;        
    console.log(q.__proto__ === p.__proto__) //true

ケース 2

var PP = function(){
    var P = function(){};
    P.prototype.get = function(){};
    return new P;
};

var p = PP(), q = PP();
console.log(q.__proto__ === p.__proto__) //false
4

4 に答える 4

3

最初のケースでは、Pget()は事前定義されたグローバルです。2 つ目は、PP を定義する関数に対してローカルであるため、インスタンスごとに異なる参照になります。

于 2012-05-06T20:59:00.297 に答える
2

最初のケースvar p = new P,q = new P;では、グローバルPとそのプロトタイプの両方がインスタンス化されているため、true が返されます。

2 番目のケースでは、qpはどちらも を使用してインスタンス化された異なるオブジェクトであり、 を使用して内部関数new PPとは異なるものを返しました。したがって、false が返されます。PPPreturn new P

于 2012-05-06T21:03:39.370 に答える
2

一番上のものには、new P.

2 番目の例new Pでは、関数を使用してから、newその関数を取得します。

これはそれを台無しにするかもしれません。

彼が言ったように、それはグローバル変数のせいです。

于 2012-05-06T21:00:54.030 に答える
2

関数を呼び出すと、PP呼び出されるたびに新しい関数オブジェクトが作成されPます。これらの関数には、それぞれ異なるプロトタイプがあります。

于 2012-05-06T21:08:09.567 に答える