0

次があるとします。

function someConstructor(){
   // initialize
}
someConstructor.prop = {test:'test'};

var obj1 = new someConstructor();
var obj2 = new someConstructor();

私の推測では、someConstructor をprop介しsomeConstructor.propて利用可能なのコピーはまだ 1 つしかないということです。obj1obj2

4

2 に答える 2

4

プロトタイプは、すべてのインスタンスに対して 1 つのオブジェクトのみが存在することを確認するために使用されます。ただし、これらのインスタンスは、そのプロトタイプを独自のオブジェクトでオーバーライドする場合があります。少なくともFirefoxでは、設定はそれを許可または継承Test.optsしません。しかし、設定はそうです。o1o2Test.prototype.opts

次のことを試してください。

var Test = function () {};
Test.opts = {helo: "hello"};

var o1 = new Test();
var o2 = new Test();
console.log( o1.opts ); // undefined
o1.opts = {helo: "bye"};
console.log( o2.opts ); // undefined

Test.prototype.opts = {helo: "hello"};
console.log( o1.opts ); // Object { helo: "bye" }
console.log( o2.opts ); // Object { helo: "hello" }
于 2013-05-30T00:50:50.483 に答える
0
function SomeConstructor(){}; someConstructor.prop = …

JavaScript では大文字と小文字が区別されます。この例は機能しません。

私の推測では、obj1 と obj2 の prop のコピーはまだ 1 つしかないということです。

いいえ、コピーは一切ありません。は関数オブジェクトのプロパティであり、またはpropとは関係ありません。それは彼らによって継承されません。obj1obj2

obj1これが、とobj2が継承するオブジェクトであるプロトタイプでプロパティを使用する場合との違いです。

オブジェクトに直接コピーされる静的プロパティ

ここで「オブジェクト」がコンストラクター関数を意味する場合のみ。JSには、クラスも「静的」プロパティもありません。それでも、「静的クラス属性」に対応するのは、コンストラクター関数のプロパティです。

于 2013-05-30T00:53:32.083 に答える