原型对象的最大问题是由其共享的本性所导致的。
原型中的所有属性被很多实例共享:
- 通过在实例中添加一个同名属性,可以隐藏原型中的对应属性(通过实例对象操作原型对象中的属性只能读,不能写)
- 对于包含引用类型的值有所不同
View Code
1 function Person(){ 2 3 } 4 5 Person.prototype = { 6 constructor: Person, 7 name: 'default name', 8 age: 0, 9 friends: ['A', 'B'] 10 } 11 12 var person1 = new Person(); 13 var person2 = new Person(); 14 15 person1.name = "June"; //在person1实例对象中添加name属性 16 person2.name = "Crazy"; //在person2实例对象中添加name属性 17 18 person1.friends.push('C'); //修改了原型中的friends属性 19 20 alert(person2.friends) //['A', 'B', 'C']
这种情况适用于所有实例共享同一个属性(该例为friends数组),但是,当各个实例要有属于自己的全部属性,就会出现问题。