Javascript 属性类型
2018-01-12 19:44 更新
Javascript面向对象设计 - Javascript属性类型
有两种不同类型的属性:数据属性和访问器属性。
数据属性包含一个值,如book1的name属性。
访问器属性不包含值。
访问器属性只需要一个getter或setter。
有一种特殊的语法来使用对象字面量来定义访问器属性:
var book1 = {
_name : "Javascript",
/* www.w3cschool.cn*/
get name() {
console.log("Reading name");
return this._name;
},
set name(value) {
console.log("Setting name to %s", value);
this._name = value;
}
};
console.log(book1.name);
book1.name = "CSS";
console.log(book1.name);
上面的代码生成以下结果。
在访问器属性名称之前使用特殊关键字 get
和 set
。
设置器接收分配给属性的值作为参数。
我们不需要定义getter和setter,我们可以选择一个或两个。
如果只定义一个getter,那么该属性将变为只读,并且尝试写入该属性将在nonstrict模式下静默失败,并在严格模式下抛出一个错误。
如果仅定义setter,那么属性将变为只写,并且尝试读取该值将在严格和非严格模式下静默失败。
属性
Javascript可以直接与属性属性交互。我们可以添加新属性以支持其他功能。
我们可以创建表现与内置JavaScript属性相同的属性。
公共属性
在数据和访问器之间共享两个属性属性属性。
一个是[[Enumerable]],它决定是否可以迭代。
另一个是[[Configurable]],它确定属性是否可以更改。
我们可以使用 delete
删除可配置属性并可以随时更改其属性。
默认情况下,我们在对象上声明的所有属性都是可枚举和可配置的。
我们可以使用 defineProperty
方法来更改 [[Enumerable]]
和 [[Configurable]]
。
var book1 = {
name : "Javascript"
};
Object.defineProperty(book1, "name", {
enumerable : false
});
console.log("name" in book1); // true
console.log(book1.propertyIsEnumerable("name")); // false
var properties = Object.keys(book1);
console.log(properties.length); // 0
Object.defineProperty(book1, "name", {
configurable : false
});
// try to delete the Property
delete book1.name;
console.log("name" in book1); // true
console.log(book1.name); // "Javascript"
//Object.defineProperty(book1, "name", { // error!!!
// configurable : true
//});
上面的代码生成以下结果。
当JavaScript以严格模式运行时,尝试删除不可配置的属性导致错误。
在非严格模式下,操作会静默失败。
以上内容是否对您有帮助:
更多建议: