
1.无序的数据集合
2.键值对的集合
使用Object.keys(obj) 可以得到obj的所有key
如何用变量做属性名
delete obj.name 或者 delete obj['name']
请区分属性值为undefined 和不含属性名
不含属性名(查看是否含有属性名方法:'XXX' in obj === false)
含有属性名,但是值为undefined
"xxx" in obj &&obj.xxx ===undefined
查看自身所有属性
Object.keys(obj) //查看所有的key
Object.values(obj) //所有的value
Object.entries(obj) //key和value值 以数组形式查看
查看自身+共有属性
console.dir(obj) 推荐用法
或者自己依次用Object.keys打印出obj.__proto__(不推荐,因为它里面的共有属性比较多)
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
总结:'name' in obj 和obj.hasOwnProperty('name')的区别:前者为查看是否有属性名 后者是判断一个属性是自身属性还是共有属性
修改属性 var obj={name:'frank' ,age:18} 修改属性直接obj.name重新赋值 写法 obj.name = 'lulu'
添加属性 obj.wuwuwu = 'wuwuwu'
批量添加属性 Object.assign(obj,{p1:1,p2:2,p3:3,p4:4})
比如上面的obj 我们可以通过修改它的obj.__proto__来修改原型 但是这种方法不推荐 一般推荐用另一种 window.Object.prototype
window.Object.prototype=obj.__proto__ //true
对象的原型图
大家都知道,在js原型继承中,不赞成直接用Obj.__ proto __ 去改变一个原型
__ proto __ 低版本IE 无法使用
其实Object.create()也可以起到原型继承的作用
Object.create(obj_proto , prototObject) 是在 ES5中提出的一种新的对象创建方式.
它一共有两个参数,
第一个参数: 新创建对象的原型
第二个参数一组参数对象的属性和值,一般不用写.
先上一个 __ proto__继承的demo:
这就是一个简单的原型继承,起初anther_student不存在 run() 这个方法,但是
这句话将anther_student的原型指向了student , anther_student在 student 上继承了run()方法 ,
原型继承我们也可以用Object.create()实现
Object.create() 方法可以传入一个原型对象,并且创建一个基于该原型的新对象.
来个Object.create() 小demo
这样,Object.create() 就实现了一个简单的原型继承.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)