标签:=== 删除 默认值 必须 The else false cti 不能
特性名称 | 描述 | 默认值 |
---|---|---|
value | 设置属性的值 | undefined |
writable | 设置是否可修改值 | true |
enumerable | 表示能否通过for-in或 obj.keys()循环返回属性。 | true |
configurable |
|
true |
var obj = {
test:"hello"
}
//对象已有的属性添加特性描述
Object.defineProperty(obj,"test",{
configurable:true | false,
enumerable:true | false,
value:任意类型的值,
writable:true | false
});
//对象新添加的属性的特性描述
Object.defineProperty(obj,"newKey",{
configurable:true | false,
enumerable:true | false,
value:任意类型的值,
writable:true | false
});
在使用 Object.defineProperty
、Object.defineProperties
或 Object.create
函数的情况下添加数据属性,writable、enumerable和configurable默认值为 false
。
使用 对象字面量 创建的属性,writable、enumerable和configurable特性默认为true。
特性名称 | 描述 | 默认值 |
---|---|---|
Get | 在读取属性时调用的函数 | undefined |
Set | 在写入属性时调用的函数 | true |
enumerable | 是否可以被枚举(使用for...in或Object.keys()) | true |
configurable |
|
true |
var obj = {};
Object.defineProperty(obj, "newKey", {
get:function (){} | undefined,
set:function (value){} | undefined
configurable: true | false
enumerable: true | false
});
语法:
Object.defineProperty(obj, prop, descriptor)
参数列表:
obj:必需。目标对象
prop:必需。需定义或修改的属性的名字
descriptor:必需。目标属性所拥有的特性
返回值:
传入函数的对象。即第一个参数obj
var obj = {};
// Object.defineProperty(对象,属性,属性描述符)
Object.defineProperty(obj, "name", {
get: function(){
return this._name; //在 get 和 set 中使用访问属性必须加 "_"
},
set: function(val){
if(Array.isArray(val)){
this._name = val;
} else{
this._name = "不是数组不能赋值";
}
},
enumerable: true, // 表示可枚举的
configurable: true // 是否可删除属性
});
// Object {get: function, set: function, enumerable: true, configurable: true}
console.log(Object.getOwnPropertyDescriptor(obj, 'name'));
obj.name = "111";
console.log(obj.name);
var obj = {};
Object.defineProperties(obj, {
name: {
value: "周华健",
writable: true
},
age: {
value: 30,
writable: true
},
sex: {
get: function(){
return this._sex;
},
set: function(val){
if(val === 1){
this._sex = "男";
}else{
this._sex = "女";
}
}
}
});
obj.sex = 0;
console.log(obj.sex); //女
标签:=== 删除 默认值 必须 The else false cti 不能
原文地址:https://www.cnblogs.com/hm0818/p/9142433.html