隐藏属性—原型
在JS每个对象中,都有一个隐藏属性,这个隐藏属性存储着其共有属性组成的对象的地址,这个公共属性组成的对象叫原型!
- 原型:公共属性组成的对象。
- 原型的地址:隐藏属性存储着原型的地址。
如以下代码:
let obj = {}obj.toString() //该代码不会报错
该代码不会因为obj对象里面没东西而报错,那是因为obj对象有个看不见的隐藏属性,该隐藏属性对应的对象有 toString() ,所以不会报错!
原型
每个对象都有原型,原型里面存储着对象的共有属性,比如obj的原型就是一个对象,而这个对象的地址由 obj.__proto__ 存储。
注意:对象的原型也是原型,也就是说原型也有原型!那最终的原型的原型是什么?答案是null
修改增加共有属性
注意:无法通过自身修改或增加共有属性!
如:
let obj = {}, obj2 = {} //共有属性toStringto.toString = 'xxx' //只会在修改obj自身属性obj2.toString //还是在原型上
当然,还是可以修改的,但不推荐这么做,否则会引出很多问题:
obj.__proto__.toString = "xxx" //不推荐使用__proto__Object.prototype.toString = 'xxx'
指定一个对象的原型是哪个对象
虽然不能修改原型,但是可以自己创建一个对象作为别的对象的原型,如:
//不推荐使用__proto__let obj = {name: 'frank'}let obj2 = {name: 'jack'}let common = {kind: 'human'}obj.__proto__ = commonobj2.__proto__ = common//推荐使用Object.createlet obj = Object.create(common)obj.name = 'frank'let obj2 = Object.create(common)obj2.name = 'jack'
