2016-12-14 15 views
2

私はJavaScriptのプロトタイプについて学ぶための骨董品ですが、多くの記事が見つかりましたが、なぜ私はj​​avascriptのオブジェクトリテラルでプロトタイプを使用できないのか理解できません。我々はすべて知っているように、私はインスタンスのオブジェクトリテラルでは、以下の例javascriptのオブジェクトリテラルでプロトタイプを使用できないのはなぜですか?

をプロトタイプを使用することはできませんよ、なぜ機能でプロトタイプを使用することができていた場合は、すべてがその場合

function Dog() { 
} 

Dog.prototype = new Animal; 
Dog.prototype.bark = function() { 
    console.log("Woof! My name is " + this.name); 
}; 

におけるようObjectから継承されます

var obj = { 
      firstname: 'foo', 
      lastname:'bar' 
     } 
     // this throws an error 
     obj.prototype.getMethod = function() { 
      console.log('this is a function'); 
     } 

私はこのすべての質問を終えましたが、javascriptのオブジェクトリテラルでcantがプロトタイプを使用しない理由に本当に答えません。以下は、参考文献の一部

refrence 1

refrence 2

refrence 3

+1

あなたがhttp://stackoverflow.com/questions/3452414/adding-a-prototype-to-an-object-literalを確認しましたか...? –

答えて

1

まずあり、.prototypeプロパティは、オブジェクトを機能するように属します。プレーンなオブジェクトインスタンスからアクセスすることはできません。基本的に、コンストラクタに関連付けられた.prototypeプロパティは、インスタンスの内部[[prototype]]を構築するときに使用されます。ここでは、あなたがそれのプロトタイプチェーンに機能を追加したい場合は、その後、あなたは@bergiが指摘したようにgetMethodを追加することの危険性がある

var obj = { firstname: 'foo', lastname:'bar' }; 
var pro = Object.getPrototypeOf(obj); 
pro.getMethod = function() { 
    console.log('this is a function'); 
}; 

ことによってそれを変更する必要があり、インスタンスを持っています上記の方法に従えば、すべての場合です。しかし、あなたが代わりに行うことができることを避けるために、

var obj = { firstname: 'foo', lastname:'bar' }; 
Object.setPrototypeOf(obj, Object.create({getMethod : function(){ 
    console.log("Hello"); 
}})); 

console.log(obj.getMethod()); //"Hello" 
+2

@LijinJohnもちろんもちろんです。 ;) –

+0

すべてのオブジェクトは継承されています。なぜオブジェクトリテラルのプロトタイププロパティにアクセスできないのですか?オブジェクトリテラルはjavascriptの関数とどう違うのですか? –

+0

'pro === Object.prototype'に注意してください。そうしないといけません。*変更したくありません。 – Bergi

関連する問題