直接看代码吧:
//写法一 function A(){} var s = new A(); A.prototype.title = "123"; alert(s.title);//"123" //写法二 function A(){} var s = new A(); A.prototype = { title : "123" }; alert(s.title);//undefined //写法三 function A(){} A.prototype.title = "123"; var s = new A(); A.prototype.title = "321"; alert(s.title);//"321" //写法四 function A(){} A.prototype = {title:"123"}; var s = new A(); A.prototype = {title:"321"}; alert(s.title);//"123"
说明什么问题?
我的理解是在调用new操作符时,实例化的对象的__proto__是指向构造函数的prototype 当前 指向的对象,也就是说下一次实例化之前如果改变构造函数的prototype指向,那么下次实例化出来的对象的__proto__的指向也会跟随构造函数的prototype指向一同改变。有点像C语言里的指针传指针。如下图所示: