学习proxy之前的object方法了解

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) ]

猜你喜欢

转载自blog.csdn.net/weixin_38987500/article/details/114097182