那这样呢? var fun = function(){}fun.prototype = { name : 'peter', age : 25 }var a = new fun(); var b = new fun();a.name = 'jack'; b.name = 'tom';
var fun = function(){}fun.prototype = { name : 'peter', age : 25 }var a = new fun(); var b = new fun();a.name = 'jack'; b.name = 'tom';这样的结果是完全不同的。
var fun = function(){}fun.prototype = { info : { name : 'peter', age : 25 } }var a = new fun(); var b = new fun();//此时a与b一样是复制了fun的属性和方法(不共享,但是空的,因为fun()是空的)可以打印证明: console.log(a.toSource());//({}) console.log(b.toSource());//({})=======================分割线====================== a.info.name = 'jack'; b.info.name = 'tom';//而fun.prototype继承而来的方法和属性同样继承给a,b。他们是共享的,所以修改.info.name大家一起修改。 //但a,b因由fun创建出来,已经没有prototype属性,但他们有__proto__属性一样可以指向到fun.prototypeconsole.log(a.prototype);//undefined console.log(a.__proto__ === fun.prototype);//trueconsole.log(a.__proto__.info.name === b.info.name);//true console.log(a.info.name === fun.prototype.info.name);//true=======================分割线====================== a.name = 'jack'; b.name = 'tom'; //这又不一样了,是各自建了一个属性,和复制fun的属性一样,不共享。等价于: var fun = function(name){ this.name = name; };fun.prototype = { info : {} };var a = new fun('jack'); var b = new fun('tom');console.log(a.toSource());//({name:"jack"}) console.log(b.toSource());//({name:"tom"})
var fun = function(){}fun.prototype = {
name : 'peter',
age : 25
}var a = new fun();
var b = new fun();a.name = 'jack';
b.name = 'tom';
name : 'peter',
age : 25
}var a = new fun();
var b = new fun();a.name = 'jack';
b.name = 'tom';这样的结果是完全不同的。
info : {
name : 'peter',
age : 25
}
}var a = new fun();
var b = new fun();//此时a与b一样是复制了fun的属性和方法(不共享,但是空的,因为fun()是空的)可以打印证明:
console.log(a.toSource());//({})
console.log(b.toSource());//({})=======================分割线======================
a.info.name = 'jack';
b.info.name = 'tom';//而fun.prototype继承而来的方法和属性同样继承给a,b。他们是共享的,所以修改.info.name大家一起修改。
//但a,b因由fun创建出来,已经没有prototype属性,但他们有__proto__属性一样可以指向到fun.prototypeconsole.log(a.prototype);//undefined
console.log(a.__proto__ === fun.prototype);//trueconsole.log(a.__proto__.info.name === b.info.name);//true
console.log(a.info.name === fun.prototype.info.name);//true=======================分割线======================
a.name = 'jack';
b.name = 'tom';
//这又不一样了,是各自建了一个属性,和复制fun的属性一样,不共享。等价于:
var fun = function(name){
this.name = name;
};fun.prototype = {
info : {}
};var a = new fun('jack');
var b = new fun('tom');console.log(a.toSource());//({name:"jack"})
console.log(b.toSource());//({name:"tom"})