eg1:
原型对象上面的属性实例对象也会有,可以打印出fn1.a = xxx;
同样创建fn2也可以是打印出来fn2.a = xxx,因为指向的是同一个原型对象;
此时,改变a的值,打印fn1.a的值,并没有变化;fn2的值是yyy。首先我们查找a时是利用原型链去查找,a并不是存在于fn1,是存放在prototype里,可以打印fn1,fn2进行查看:
fn2自身是多了一个a属性为yyy,原型上有个a是xxx,也就是说明:
1. 读取对象属性时:会自动到原型链中查找;
2. 设置对象的属性值时,不会查找原型链,如果当前对象中没有此属性,直接添加属性并设置其值;
两个实例对象的隐式原型也是相等的p1._proto = p2._proto ,因为指向了同一个构造函数对象Person。所以:
3. 方法一般定义在原型中,属性一般通过构造函数定义在对象本身上;