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
指定されたオブジェクトの空き属性記述子を返します。最初のパラメーターは指定されたオブジェクトであり、2番目のパラメーターは取得する記述子の属性です。
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
属性とその記述子をオブジェクトに追加します。最初のパラメーターは指定されたオブジェクト、2番目のパラメーターは属性名、3番目のパラメーターは記述子オブジェクトです。
記述子属性
値属性値デフォルト値は未定義
書き込み可能属性をオペレーターが変更できるかどうかデフォルト値はfalse
列挙可能属性が列挙可能かどうかデフォルト値はfalse
構成可能属性を削除できるかどうかデフォルト値は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) ]