2016-03-23 14 views
1

javascriptでの削除操作の理解に問題があります。JavaScriptでの操作の削除

次のように私は、オブジェクトを持っている -

var object = {"name" : "abc"}; 

object.prototype = {"name" : "xyz"}; 

私はオブジェクトから「名前」プロパティを削除した場合、プロトタイプ値のみget操作で使用されているように、オブジェクトからではなく、プロトタイプからそれを削除する必要があります。

だから後 - 私はobject.nameを印刷する場合、私の意見では、それは私に「XYZ」を与える必要がありながら

delete object.name 

それは、「未定義」私を与えます。

まず、削除操作でobject.nameの値を 'undefined'に設定していると思ったが、object.hasOwnProperty( 'name')を指定するとfalseが返されます。

何か不足していますか?

+1

_ifは私が印刷._あなたが '' object.name'を混同しているようですobject.prototype.name' – hindmost

+0

記述する動作は、プロトタイプチェーンでプロトタイプが発生した場合にのみ発生します。 – RamblinRose

答えて

7

ご理解の穴は試作品で、削除ではありません。

プロトタイプの値は、プロトタイププロパティが属するオブジェクトではなく、オブジェクトのインスタンスに表示されます。

コンストラクタ関数を作成し、プロトタイプをその上に置き、newを使用してその関数からオブジェクトをインスタンス化する必要があります。それは私の意見では、それは「XYZ」私を与える必要がありながら、私は、「未定義」与えobject.name

function MyObject (name) { 
 
    this.name = name; 
 
} 
 

 
MyObject.prototype.name = "xyz"; 
 

 
var instance = new MyObject("abc"); 
 

 
document.write(instance.name); 
 
document.write("<br>"); 
 
delete instance.name; 
 
document.write(instance.name);

+0

偉大な答えが、私は "プロトタイプの値は、オブジェクトのインスタンスではなく、プロトタイプのプロパティが属しているオブジェクトに表示されます"と苦労しています - 誰も少し、拡張することができますか? –

+0

@WillJenkins - うーん。やった。次の段落で。 – Quentin

関連する問題