gpt4 book ai didi

javascript - 为什么这个属性不想被删除

转载 作者:行者123 更新时间:2023-12-02 16:54:06 26 4
gpt4 key购买 nike

编写此代码仅用于实验目的。在这里,我使用 Object.defineProperty 创建一个名为 'fullName' 的属性,并使用 set 为 person 定义了另一个名为 middleName 的属性。我必须通过 fullName 将值传递给 middleName。它们都有可枚举属性 TRUE,因此 for..in 循环可以访问它。但是后来我想从对象中删除 middleName 属性。但它仍然在那里。为什么它仍然在那里?

(function(){
person = {
firstName: 'will',
lastName: 'Smith'
};

Object.defineProperty(person,'fullName',{

set:function(mid){
Object.defineProperty(person,'middleName',{
value : mid,
enumerable: true,
writeable : false
});
},
get:function(){
document.write(this.middleName);
},
enumerable:true
});

person.fullName='lol';
person.fullName;
document.write(Object.getOwnPropertyNames(person)+'</br>');

for(key in person){
document.write(key+'</br>');
}

document.write('\n');
delete (person.middleName);
document.write(person.middleName+'</br>');

for(key in person){
document.write(key+'</br>');
}
})()

最佳答案

当使用Object.defineProperty时,可配置属性默认设置为 false(请参阅 ToPropertyDescriptor,步骤 4),因此 middleName 属性不可删除。

请注意:

delete (person.middleName);

括号是多余的,应该写成:

delete person.middleName;

一个简单的例子是:

// Create object o
var o = {};

// Define property a with value bar
Object.defineProperty(o, 'a', {
value : 'bar'
});

console.log(o.a); // bar

// Since the configurable property of a was not set, it defaults to false
// so it can't be deleted
delete o.a;

console.log(o.a); // bar

// Create property b with value fum and configurable true
Object.defineProperty(o, 'b', {
value : 'fum',
configurable: true
});

console.log(o.b); // fum

// Since b's configurable attribute is true, it can be deleted
delete o.b;

console.log(o.hasOwnProperty('b')); // false
console.log(o.b); // undefined

关于javascript - 为什么这个属性不想被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com