Object.createで作成したオブジェクトでdeleteが効かない理由 – JavaScript

Object.createは既存のオブジェクトを拡張して、新しいオブジェクトを生成します。

JS

const Dog = {
  name : "ポチ",
  bark : "わん!"
}

const dog = Object.create(Dog);

console.log(dog.name); // ポチ

オブジェクトからプロパティを削除したい場合はdelete演算子を使います。しかし、この場合deleteを実行してもプロパティは削除されません。

JS

delete dog.name;
console.log(dog.name); // ポチ

なぜdeleteできないのか?

deleteが実行されるのはオブジェクト自身がもつ(継承されていない)プロパティです。一方でObject.createで新しく生成されるオブジェクトは「既存のオブジェクトをプロトタイプとして使用」して生成されたものです。

この場合nameとbarkはプロトタイプとして継承されたプロパティとなります。そのためObject.createから生成したオブジェクトから、これらのプロパティに対してdeleteを実行しても削除は行われません。

deleteできるプロパティかを判定する方法

ここでhasOwnPropertyメソッドを用いると名前の通り「オブジェクト自身が持つプロパティを持つか?」を判定することができます。

JS

console.log(dog.hasOwnProperty("name")); //false

trueであればそのプロパティを削除することができます。

Related Posts