- defineProperty(给对象定义属性) vue框架的底层核心语法
Object.defineProperty(obj,property,descriptor)
- 参数1:obj 绑定属性的目标对象
- 参数二:property 绑定的属性名
- 参数三:descriptor 属性描述(配置),且此参数本身为一个对象
var obj = {}
Object.defineProperty(obj, "a", {
// value: "默认值", //设置a的属性值为多少
// writeable: true,// 是否可以修改属性值,默认false
enumerable: false, //设置属性值是否允许遍历 默认false
configurable: false, //设置属性是否可删 默认false
set(el) {
console.log(el); //打印设置好的值
},
get() {
// 通过get方法获取属性的值
// 当设置get方法时,不能有value和writable方法,否则会报错
return 100 //a=100
}
});
obj.a = 10
- create用来创建指定原型和属性控制的对象
var obj = {
name: "sehun",
age: 20
}
var f1 = Object.create(obj, {
a: {
// value: "默认值", //设置a的属性值为多少
// writeable: true,// 是否可以修改属性值,默认false
enumerable: false, //设置属性值是否允许遍历 默认false
configurable: false, //设置属性是否可删 默认false
set(el) {
console.log(el); //打印设置好的值
},
get() {
// 通过get方法获取属性的值
// 当设置get方法时,不能有value和writable方法,否则会报错
return 100 //a=100
}
}
});
obj.a = 10
console.log(f1)
- Object.getOwnPropertyDescriptor(obj,propName) 返回obj的属性propName的属性描述符
var arr = []
re = Object.getOwnPropertyDescriptor(arr, "length")
console.log(re)
- Object.preventExtensions(obj) 可以禁止obj对象的属性扩展
var obj = {
hqyj: 100
}
var re = Object.preventExtensions(obj) //不能再添加属性
console.log(re, re === obj)
obj.age = 200
console.log(obj, obj.age)
-
Object.seal(obj) 可以禁止obj对象的属性扩展和删除,它相对与preventExtensible方法而言 ,将所有属性的configurable属性设置为false。
-
Object.freeze(obj) 可以禁止对obj的所有操作,它相对与preventExtensible方法而言,将属性的configurable属性和writable属性都设置为了false
-
Object.isExtensible(obj)、Object.isSealed(obj)、Object.isFrozen(obj) 分别对应了上述三个方法是否对obj进行了设置