我试图从这样的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);