JS中,实例仅指向最初原型对象吗?(JS高级程序设计疑问)

Todd_hua 2015-09-13 12:25:43


第一张图片中,划红线的地方仅指最初原型吗?
第二张图片中,1代表最初原型对象,2代表现有原型对象,是吗?
参见《JS高级程序设计》156、157页。
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Todd_hua 2015-09-13
  • 打赏
  • 举报
回复
不对,实例中的原型应该是指向当前状态下最新的原型。因为第一张图片中,定义friend实例时,原型中没有name属性,所以浏览器不会弹出警告框。 (这种理解对吗?)
天际的海浪 2015-09-13
  • 打赏
  • 举报
回复
你理解的没错,写个例子就容易明白了 下面 a b c 都是 Class 的实例,但它们的原型各不相同

function Class() {
}
Class.prototype = { name: "aaa" };//更换整个原型
var a = new Class();
Class.prototype = { name: "bbb" };//更换整个原型
var b = new Class();
Class.prototype = { name: "ccc" };//更换整个原型
var c = new Class();
alert(a.name);//输出aaa
alert(b.name);//输出bbb
alert(c.name);//输出ccc
  • 打赏
  • 举报
回复
引用 楼主 todd12321 的回复:
第一张图片中,划红线的地方仅指最初原型吗? 第二张图片中,1代表最初原型对象,2代表现有原型对象,是吗?
是的。 第一张图中划红线的地方,指构造函数所拥有的任何“现在的原型”。由于你是在 friend 调用了构造函数之后才修改了构造函数的原型,因此 friend 的属性指针全都指向旧的 cached 的原型对象,而不是新创建的原型对象。

87,942

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧