js中构造函数的prototype属性的引用问题。
<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是可以操作他引用的对象的。