Object.getPrototypeOf()
返回指定对象的原型
var pro = {
}
var obj1 = Object.create(pro)
console.log(Object.getPrototypeOf(obj1)==pro)
//true
Object.setPrototypeOf()
将一个指定对象的原型设为另一个对象或者null
Object.setPrototypeOf(obj,prototype)
参数
obj:为需要改变原型的对象
prototype:为obj指定的原型
Object.isExtensible()
判断一个对象是否可以扩展(是否能添加新的属性)
var obj1={
}
Object.preventExtension(obj1)//变为不可扩展
console.log(Object.isExtensible(obj1)) //false
var sealObj ={
}
obj2 = Object.seal(sealObj) //密封对象不可扩展
console.log(Object.isExtensible(sealObj)) //false
var frozenObj = {
}
forzenObj = Object.freeze(frozenObj)
console.log(Object.isExtensible(frozenObj))
Object.preventExtension
是一个对象变为不可扩展,具体使用在isExtensible已展示
Object.getOwnPropertyDescriptor
返回指定对象的一个自由属性的描述符,第一个参数为指定对象,第二个参数为要获取描述符的属性
var obj= {
}
Object.defineProperty(obj,"keyOne",{
value:"Hello world",
writable:false, //属性不由运算符赋值
enumerable:false //属性不可枚举
})
console.log(Object.getOwnPropertyDescriptor(obj,"keyOne"))
// { value: "Hello world", writable: false, enumerable: false, configurable: false }
Object.defineProperty
给一个对象添加属性和其描述符,第一个参数为指定对象,第二个参数为属性名,第三个参数为,描述符对象
描述符属性
value 属性值 默认值为undefined
writable 属性是否可被运算符修改 默认值为false
enumerable 属性是否可枚举 默认值为false
configurable 属性是否可被删除 默认值为true
var obj ={
keyOne:"hey"
}
Object.defineProperty(obj,"keyTwo",{
value:"Hellow World",
writable:false,
enumerable:false,
configurable:true
})
//对obj对象新增了一个属性keyTwo,该属性值为"Hello World",不可修改,不可枚举,可被删除,接下里我们一个一个试一下
console.log(obj.keyTwo) //Hello World
obj.keyTwo="bye bye"
console.log(obj,keyTwo) //Hello World
for(let key in obj){
console.log(key) //keyOne
}
delete obj.keyTwo
console.log(obj.keyTwo) //undefined
Object.keys
返回一个指定对象的可枚举属性的数组
var obj={
keyOne:0,
keyTwo:1,
keyThree:2
}
console.log(Object.keys(obj)) //[ 'keyOne', 'keyTwo', 'keyThree' ]
Object.getOwnPropertyNames()
返回一个指定对象的属性的数组,包括可枚举和不可枚举属性
var obj={
keyOne:0,
keyTwo:1,
keyThree:2
}
Object.defineProperty(obj,"keyFour",{
value:4,
enumerable:false
})
console.log(Object.keys(obj)) //[ 'keyOne', 'keyTwo', 'keyThree' ]
console.log(Object.getOwnPropertyNames(obj)) //[ 'keyOne', 'keyTwo', 'keyThree', 'keyFour' ]
Object.getOwnPropertySymbols
返回指定对象所有Symbol属性数组
var symbolKey1 = Symbol("keyOne")
var symbolKey2 = Symbol.for("keyTwo")
//symbol() 和 symbol.for()的区别是 symbol不会检索全局 每次都创建一个新的symbol类型值,symbol.for(key)会先检索全局,如果key已存在则会返回已存在的symbol类型值,不存在的话则会创建一个新的symbol值
var obj={
}
obj[symbolKey1]="symbolkeyOne"
obj[symbolKey2]="symbolKeyTwo"
coconsole.log(Object.getOwnPropertySymbols(obj)) //[ Symbol(keyOne), Symbol(keyTwo) ]