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であればそのプロパティを削除することができます。