0

私は Crockford が JavaScript の継承のための有名なオブジェクト関数を持っていることを知っています:

function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

F.prototype = oしかし、次のように、なぜ彼がF.prototype's コンストラクターをリセットしないのか、行の後、私は混乱しています。

F.prototype.constructor = F

それが常識ではないでしょうか。

4

2 に答える 2

0

のインスタンスをFプロトタイプ オブジェクト自体として使用しているため、constructorプロパティを設定する利点はありません。

例えば:

function Foo() {}
function Bar() {}

Bar.prototype = object(Foo.prototype);
Bar.prototype.constructor = Bar;

したがって、今Bar.prototypeは のインスタンスですF。に割り当てられたconstructorプロパティをシャドウするインスタンスにconstructorプロパティを割り当てましたF.prototype。では、なぜわざわざそれを最初に割り当てるのでしょうか?

一般に、このconstructorプロパティは JavaScript では意味がありませんが、独自のコードでは役立つ場合があります。つまり、コードは の正しい値に依存している可能性がありますconstructor。ただし、object関数内でFは、一時的なコンストラクターにすぎず、新しいブラウザーでサポートされてobjectいる の機能を複製するだけです。コードでObject.create参照が必要なユースケースは考えられません。F

于 2013-08-05T09:00:34.200 に答える