2016-12-21 13 views
0
var oldobj = { 
    firstm: function() { console.log("firstm"); }, 
    secondm: function() { console.log("secondm"); } 
}; 

var newobj= Object(oldobj); 

newobj.thirdm = function() { console.log("thirdm"); }; 

oldobj.fourthm = function() { console.log("4thm"); }; 

newobj.fifthm = function() { console.log("5thm"); }; 

oldobj.fifthm(); // logs "5thm" in console 

プロトタイプの継承によると、oldobjにはnewobj関数へのリンクがありません。しかし、上記の例では、oldobjはnewobjのfifthm()にアクセスできますか?プロトタイプの継承が期待通りに機能しない

+4

'Object()'と 'Object.create()'を混同していますか? –

答えて

4

ここに継承はありません。 2つのオブジェクトもありません。

var newobj= Object(oldobj); 

oldobjからnewobjを等しくなります。 MDN on Objectから

値が既にオブジェクトがある場合

、それはJavaScriptで

原型継承は異なり非常にを行われている値を返します。私はthis introductionを読むことをお勧めします。

としてはそれが何を望んでいたことObject.createた可能性があります、フェリックスクリングによって指摘さ:これは、クラスをしないことを

var newobj= Object.create(oldobj); 

注意あなたがいない場合、それは継承よりもインスタンス化の多くのようなものです2つのプロトタイプを定義する。

関連する問題