javaScript构造函数中prototype引用的问题,js高手进!!

2024-11-22 15:53:08
推荐回答(2个)
回答1:

{ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}} 是对象,对象总是被引用的,因此

obj.prototype 确实是对 fn.prototype的引用,但是fn.prototype本身也是在引用对象。
因此,第一段中fn.prototype=null;仅仅是解除了fn.prototype对对象{ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}}的引用,所以obj不受影响。但是第二段你通过fn.prototype修改了对象{ attr1:"aaa", attr2:"bbb",attr3:function(){alert('')}}的值,obj当然被影响了。

换个写法你就明白了
var data = {attr1: "aaa"};
function fn(){}
fn.prototype = data;
var obj = new fn();
这个时候fn.prototype引用了data, obj也引用了data。

回答2:

vsr obj = new fn()之后和fn没什么关系了。obj是用fn创建的新对象。
如果在fn.prototype=null;之后再
var newObj = new fn(),这时候newObj就没有attr1,attr2...了。