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');//你外婆不认你们,只认这个外甥女