2

私はこれをStackOverflowで見ました: https ://stackoverflow.com/a/7786090/289246

答えは次のように指示しています。

DynamicBody.prototype = Object.create( PhysicsBody.prototype );

Object.createを使用する理由は何ですか?
なぜ私たちはただ使うことができないのですか:

DynamicBody.prototype = PhysicsBody.prototype;

4

2 に答える 2

10

(技術的には) できますが、 に加えた変更はすべてDynamicBody.prototypeにも適用されますPhysicsBody.prototype。つまり、すべてのPhysicsBodyインスタンスに影響し、通常、これは望ましくありません。

例:

function Foo() {};
Foo.prototype.say = function() {
   alert('Foo');
};
var foo = new Foo();

function Bar() {};
Bar.prototype = Foo.prototype;
Bar.prototype.say = function() {
    alert('Bar');
};

foo.say(); // alerts 'Bar'

Object.create1 レベルの間接化を追加します。

于 2013-03-08T22:23:18.673 に答える
0

Javascriptにはプロトタイプベースの継承があります。つまり、クラスから継承する従来の継承とは異なり、継承はオブジェクトから直接発生します。

これを行うとき:

Foo.protoype = Bar.prototypeBar-オブジェクトからすべての変数とメソッドを継承していますが、FooのプロトタイプBarを変更すると、プロトタイプが変更されます(上記のステートメントのため、Foo.prototype参照Bar.prototype)。

Object.create()プロパティのような古典的な継承をに追加するために使用されFooます。したがって、オブジェクトから直接継承するのではなくObject、指定されたプロトタイプを使用して継承します。またFoo、ステートメントの後への変更は変更されFoo.prototype = Object.create(Bar.prototype)ませんBar

詳細については、こちらをご覧ください。

于 2013-03-08T22:32:12.003 に答える