6.原型对象的问题



// 原型对象的缺点:省略了为构造函数传递初始化参数这一环节,结果所有的实例在默认情况下都取的相同的属性值
// 原型模式的最大问题是由其共享的性质导致的
// 原型中所有属性是被很多实例共享的,这种共享对于函数非常合适,但对于包含引用类型值的属性来说,问题就比较多了

function Person(){

}

Person.prototype={
constructor:Person,
name:"summer",
age:20,
job:"enginner",
friends:["su1","su2"],
sayName:function(){
console.log(this.name);
}
}

var person1=new Person();
var person2=new Person();
person1.friends.push("su3");
console.log(person1.friends); // ["su1", "su2", "su3"]
console.log(person2.friends); // ["su1", "su2", "su3"]
console.log(person1.friends===person2.friends); // true

// 由于friends数组存在于Person.prototype中,而非person1中,因此在person2.friends中也会反映出来
// 但是,一般情况下,我们的要求是实例要有属于自己的属性,因此,很少有人单独使用原型模式
原文地址:https://www.cnblogs.com/liululu/p/5833472.html