可配置和可编写的Javascript
Configurable and Writable Javascript
本文关键字:Javascript 配置 更新时间:2023-09-26
我目前正在学习Javascript中的OOP,我遇到了这个困惑
var person={
name:"kevin",
};
Object.defineProperty(person,"name",{
enumerable:false,
configurable:true,
writable:false,
});
delete person.name;
person.name="blue";
alert(person.name);
如您所见,可写设置为false
,可配置设置为true
,反之亦然,它仍然将名称从"Kevin"
更改为"蓝色"。
如果writible为false,为什么名称会更改?请解释清楚
代码的链接
您的对象中有一个文字属性name
,然后在其上使用Object.defineProperty
。
像这个吗
var person = {};
Object.defineProperty(person, "name", {
enumerable: false,
configurable: true,
writable: false
});
// this does nothing
person.name = "kevin";
// see? still undefined
console.log(person.name); // undefined
我认为这是一个更好的方法
// "Person" constructor
function Person(name) {
Object.defineProperty(this, "name", {
configurable: true,
get: function() { return name; },
set: function(newName) { return name = newName; }
});
}
// init with name
var person = new Person("kevin");
// check it
console.log(person.name); // "kevin"
// set a name
person.name = "kevin2";
// check it
console.log(person.name); // "kevin2"
// delete the name property
delete person.name;
// check again
console.log(person.name); // undefined
由于您将属性设置为configurable:true
,因此可以删除它。
调用delete person.name;
后,name属性将消失。
然后当你呼叫person.name="blue";
创建一个新属性,默认情况下是可写的
您首先创建一个对象,然后在属性已经存在时定义该属性。为了避免Kevin被更改,你需要有这样的代码:
var person={};
Object.defineProperty(person,"name",{
value:"kevin",
enumerable:false,
configurable:false,
writable:false,
});
delete person.name;
person.name="blue";
alert(person.name);
Gist
请参阅ECMAScript®语言规范(5.1)的第8.12.9节
注意本节底部的注释:
注:步骤10.b允许Desc的任何字段与如果当前的[[Configuration]]字段为是的。这甚至允许更改其[[Writable]]属性为false。这是允许的,因为[[Configuration]]属性将允许调用其中首先将[[Writable]]设置为true、设置新的[[Value]],然后将[[Writable]]设置为false。
这也适用于删除可配置属性,允许您用不同的值重新定义它。
相关文章:
- Javascript配置服务器URL并将其存储
- react路由器使用简单的javascript路由器配置来处理不匹配的路径
- 使用javascript配置文件作为handlebas博客模板,但配置不是't工作正常
- 如何在aws S3 javascript SDK中配置interval和max_attempts
- 使用Javascript而不是html数据属性配置Parsley
- 可能有一个javascript和php的配置文件
- 如何在javascript中访问flask配置
- javascript window.addEventListener,覆盖了第一个元素的配置
- Webdriver:用于动态禁用/启用JavaScript弹出窗口的Firefox配置文件
- 如何配置js美化程序设置来实际美化我的HTML/Javascript代码
- 手动配置值,并在JavaScript中更改框(圆)的颜色
- 带有所有用户操作的业务逻辑的Javascript配置文件
- JavaScript:从表配置字符串中提取列标题
- 如何使用 JavaScript 配置 DocPad 集合?“警告:自定义集合 XYZ 不是有效的集合实例”
- 用于 OpenLayer 的 JavaScript 配置文件
- Javascript配置对象建议
- 在Lightswitch中使用Javascript配置一个地图控件
- 如何从web读取会话超时值.在JS文件中使用javascript配置
- Javascript:配置模式
- 如何使用来自web的值更新JavaScript.配置文件.NET MVC4 Razor项目