直接看代码吧:
//写法一
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语言里的指针传指针。如下图所示: