我试图从这样的Person对象中删除属性:



const Person = {
  firstname: 'John',
  lastname: 'Doe'
}

console.log(Person.firstname);
// Output: "John"

delete Person.firstname;

console.log(Person.firstname);
// Output: undefined





当我使用此delete操作符时,工作正常,Person.firstname日志按预期显示为undefined。但是,当我使用Person方法使用此Object.create()对象创建新对象时,如下所示:



const Person = {
  firstname: 'John',
  lastname: 'Doe'
}

const Person2 = Object.create(Person);

console.log(Person2.firstname);
// Output: "John"

delete Person2.firstname;

console.log(Person2.firstname);
// expected output: undefined
// actual output: "John"





您可以看到Person2.firstname最后返回“ John”,而我希望它的工作方式与第一个代码片段相同,然后返回undefined

所以,我的问题是:


为什么delete Person2.firstname不起作用?
另外,如何从firstname对象中删除Person2属性?


谢谢你的帮助。

最佳答案

delete仅在要删除的属性是自己的不可配置属性时才成功从对象中删除该属性。在这里,您的Person2没有自己的firstname属性,因此delete Person2.firstname不起作用。该属性存在于Person2的内部原型上,但不存在于Person2本身上。

要删除该属性,您必须使用原型对象调用delete

delete Person.firstname;




const Person = {
  firstname: 'John',
  lastname: 'Doe'
}
const Person2 = Object.create(Person);
delete Person.firstname;
console.log(Person2);





或者,如果您还没有引用,请使用Object.getPrototypeOf

delete Object.getPrototypeOf(Person2).firstname;




const Person = {
  firstname: 'John',
  lastname: 'Doe'
}

const Person2 = Object.create(Person);
delete Object.getPrototypeOf(Person2).firstname;
console.log(Person2);

09-20 10:14