function Person(name){
this.name = name;
};
function Mother(){
};
//给mother提供公有的属性
Mother.prototype = {
age:18,
home:['Beijing','Shanghai']
}
//Person的属性 指向Mother的原型
Person.prototype = new Mother();
//实例化
var p1 = new Person('jack');//通过p1.__proto__ 可以查到p1和p2的原型是一样的。age:18 home:Beijing Shanghai
var p2 = new Person('viven');
p1.age = 118;
console.log(p1.age); //118
console.log(p2.age);//18
//通过__proto__查看到p1的原型还是没变,但是p1多了一个age属性 值为118,也就是说实例不能改变原型的属性
p1.home[0] = 'Shenzhen';
console.log(p1.home);// Shenzhen Shanghai
console.log(p2.home);// Shenzhen Shanghai 因为原型中的引用类型的值是共享的,可以改变
//同样可以和上面一样,改变原型的属性
p1.home =['guangzhou','hangzhou'];
console.log(p1.home);
console.log(p2.home); //改变不了,只是给p1添加了一个home的属性
//可以通过delete 来删除实例的属性
delete p1.age;
console.log(p1.age); //18
//改写原型
Person.prototype.name = 'kevin';
delete p1.name;
console.log(p1.name);//kevin 给Person的原型添加了一个name 属性,但是会被实例p1的name 覆盖
//重写原型
Person.prototype = {
age: 28,
address: { country: 'USA', city: 'Washington' }
};
var p3 = new Person('Obama');//原型重写后和Mother没有一点关系了。。
//改写Mother原型
Mother.prototype.no = 9527; //p1 p2有联系,但是p3没有关系
//重写Mother原型
//外婆赚钱了,买了2辆车,谁有一份呢?
Mother.prototype = {
car:2,
carname:['benchi','baoma']
}
var p4 = new Person('join'); //谁都没有份,因为Person和Mother已经断绝关系了。。。
//为了车和你外婆和好
Person.prototype =new Mother();
var p5 = new Person('lala');//你外婆不认你们,只认这个外甥女