Object.getPrototypeOf ()
Devuelve el prototipo del objeto especificado.
var pro = {
}
var obj1 = Object.create(pro)
console.log(Object.getPrototypeOf(obj1)==pro)
//true
Object.setPrototypeOf ()
Establecer el prototipo de un objeto especificado en otro objeto o nulo
Object.setPrototypeOf(obj,prototype)
Parámetro
obj: para el objeto cuyo
prototipo necesita ser cambiado prototipo: el prototipo especificado para obj
Object.isExtensible ()
Determinar si un objeto se puede extender (si se pueden agregar nuevos atributos)
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
Si un objeto se vuelve no extensible, el uso específico se muestra en isExtensible
Object.getOwnPropertyDescriptor
Devuelve un descriptor de atributo libre del objeto especificado, el primer parámetro es el objeto especificado y el segundo parámetro es el atributo del descriptor que se va a obtener
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
Agregue un atributo y su descriptor a un objeto, el primer parámetro es el objeto especificado, el segundo parámetro es el nombre del atributo y el tercer parámetro es el objeto descriptor
Descriptor atributo
valor atributo valor El valor predeterminado es indefinido
escribible si el operador puede modificar el atributo El valor predeterminado es falso
enumerable si el atributo es enumerable El valor predeterminado es falso
Si el atributo configurable se puede eliminar El valor predeterminado es verdadero
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
Devuelve una matriz de propiedades enumerables del objeto especificado.
var obj={
keyOne:0,
keyTwo:1,
keyThree:2
}
console.log(Object.keys(obj)) //[ 'keyOne', 'keyTwo', 'keyThree' ]
Object.getOwnPropertyNames ()
Devuelve una matriz de las propiedades de un objeto especificado, incluidas las propiedades enumerables y no enumerables.
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
Devuelve una matriz de todos los atributos de símbolo del objeto especificado.
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) ]