function A(var1){ this.var1 = var1; } A.prototype = { var1:1 } var b=new A(); b.var1 = 2; var c = new A(); console.log(b.var1); //输出2 console.log(c.var1); //输出undefined
function A(){ //do noting } A.prototype = { var1:1 } var b=new A(); b.var1 = 2; var c = new A(); console.log(b.var1); //输出2 console.log(c.var1); //输出1
为什么输出不同,解释如下:
对于第一段代码:在实例化的过程中,b和c对象用到了A构造函数,那个var1都变成了b和c的自有属性,所以打印 b或者c的 var1属性的值的时候,直接从当前对象取值,而c的var1属性没有赋值,所以为undefined。
对于第二段代码:var1是b对象的自有属性而不是c的自有属性,所以打印b的值就是直接打印的自有属性的值2,而打印c则是打印的原型对象的值。