为了账号安全,请及时绑定邮箱和手机立即绑定

为什么技术上,对象被实例化?这段没看懂

为什么技术上,对象被实例化?这段没看懂

慕丝7291255 2023-04-24 18:14:26
书中讲动态原型继承实现继承,给了一段错误代码function Polygon(sides){  this.sides = sides;  if(typeof Polygon._initialized == "undefined"){    Polygon.prototype.getName = function(){      return "dash";     } alert(Polygon._initialized);    Polygon._initialized = true;   } }function Triangle(base, height){  Polygon.call(this,3);  this.base = base;  this.height = height;  if(typeof Triangle._initialized == "undefined"){     **;**    Triangle.prototype.getArea = function(){      return 0.5 * this.base * this.height;     }        Triangle._initialized = true;   } }window.onload = function(){  var ri = new Triangle(10,20);  var tri = new Triangle(20,40);  alert(ri.getArea());  alert(ri.getName());  alert(ri.sides);     alert(tri.getArea());    alert(tri.getName());  alert(tri.sides); }粗体部分的代码有错,书中原文解释:从逻辑上讲,这个位置是正确的,但从功能上讲,却是无效的.从技术上 说,在代码运行前,对象已经被实例化,并与原始的prototype对象联系在一起了.虽然用极晚绑定可使对原型对象的修改正确地反映出来,但替换 prototype对象不会对该对象产生任何影响.只有未来的对象(第二个以后的对象)实例才会反映出这种改变,这就使第一个实例变得不正确。
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

第一次 ri = new Triangle 中 this 的 prototype 为原本的 Triangle.prototype
但中途又改了 Triangle.prototype
之后其实就会 false === ri instanceof Triangle

查看完整回答
反对 回复 2023-04-28
?
冉冉说

TA贡献1877条经验 获得超1个赞

很有深度又感觉通俗易懂.我原先对这个概念也很模糊,

这个关键的概念只要你懂了,基本其它的也就很容易懂了。


//img1.sycdn.imooc.com//644b7fa70001ca1e08080492.jpg

查看完整回答
反对 回复 2023-04-28
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信