js中构造函数的prototype属性的引用问题。

xiangnile55 2013-03-08 02:45:42
<html>
<body>
<script language="javascript">
function fn(){}
fn.prototype={ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}};
var obj=new fn();
document.write(obj.attr1 + "<br />"); //result: aaa
document.write(obj.attr2 + "<br />"); //result: bbb
document.write(obj instanceof fn); //result: true
document.write("<br/>");
fn.prototype=null;
document.write(obj.attr1 + "<br />"); //result: aaa
document.write(obj.attr2 + "<br />"); //result: bbb
document.write(obj.attr3 + "<br />");
</script>
</body>
</html>

看第二段代码:

<html>
<body>
<script language="javascript">
function fn(){}
fn.prototype={ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}};
var obj=new fn();
document.write(obj.attr1 + "<br />"); //result: aaa
document.write(obj.attr2 + "<br />"); //result: bbb
document.write(obj instanceof fn); //result: true
document.write("<br/>");
fn.prototype.attr1="ccc";
document.write(obj.attr1 + "<br />"); //result: ccc
document.write(obj.attr2 + "<br />"); //result: bbb
document.write(obj.attr3 + "<br />");
</script>
</body>
</html>

我想问的是:
为什么第一段代码在fn.prototype=null;后obj为什么还能访问到attr1,attr2,attr3?显然fn.prototype引用的是{ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}};对象,通过第二段代码也可以看出fn.prototype是可以操作他引用的对象的。
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dosgege 2013-03-09
  • 打赏
  • 举报
回复
楼主学过c语言的指针吗? 类似,两个指针指向同一个对象,当其中一个不再指向这个对象时,另一个指针仍然指向这个对象的话,他就可以操作这个对象,除非这个对象不存在了
菜牛 2013-03-09
  • 打赏
  • 举报
回复
你并没有修改obj这个对象!fn函数的作用,在你new fun()的时候已经完成了,后面怎么修改fn和obj都没有关系。
jswatcher 2013-03-08
  • 打赏
  • 举报
回复
你的问题等同于: fn.prototype={ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}}; var foo = fn.prototype; fn.prototype=null; 这时问 foo.attr1 可以访问吗? 我想你也明白 foo.attr1 当然可以访问。 现在回到你的原来的问题: var obj=new fn(); 这行包括 obj._prototype = fn.prototype; 当然了,你看不见“obj._prototype”(_prototype是假设的名字,也可能用其它名字)。 fn.prototype=null 后,暗藏的obj._prototype仍然记得原来的值。 所以当 访问 obj.attr1 时,它的值就是 obj._prototype.attr1 !

87,909

社区成员

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

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