之前知道在一个函数的prototype里的属性是共享值的,但是不甚了解,今天自己试验了一下:
var Aclass = function(){};
Aclass.prototype = {
cde: {a:1},
abc: 'is abc',
setAbc: function(v){
this.abc = v;
this.cde.a = 2;
},
getAbc: function(){
console.log(this.abc);
console.log(this.cde);
}
};
var a = new Aclass();
a.setAbc('new abccc');
a.getAbc(); //控制台打出new abccc和{a:2}
var b = new Aclass();
b.getAbc(); //控制台打出is abc和{a:2}
结论:prototype里的属性,如果值是对象(包括函数,数组等),那么这个属性会被各实例之间共享;如果值是基本类型,那么不会被共享。