javascript:关于这里的构造函数重新定义?

function Universe(){
//缓存实例
var instance;

//重写构造函数
Universe=function Universe(){
return instance;
};
//保留原型属性
Universe.prototype=this;

//实例
instance=new Universe();//??????????????????

//重置构造函数指针
//instance.constructor=Universe;

//所有功能
instance.start_time=0;
instance.bang="Big";

return instance;
}

这里的Universe构造函数的所有初始化只能执行一次,第二次执行时Universe被重置为
function Universe(){
return instance;
};

我的问题是,重置是什么时候开始生效的?第一次执行Universe时,new Universe();到底是new的旧构造函数还是被置换后的新构造函数呢?

隔江千里
浏览 666回答 2
2回答

眼眸繁星

重置是什么时候开始生效的?答:重置是在第一次执行Universe时生效的,不调用Universe不会引发重置.new Universe();到底是new的旧构造函数还是被置换后的新构造函数呢?答:new Universe(); 创建的是被置换后的新构造函数.因为在new Universe()之前重定义了Universe=function Universe(){return instance;};Universe.prototype=this; //这里把旧构造函数里的成员都继承过来了已经重写了旧的构造函数。所以这里new 的是新的构造函数

慕桂英546537

Universe.prototype=this;这个很迷惑,构造函数内部的this应当是指向实例的,如果要保留原型属性应该是这么写的吧,Universe.prototype=this.__proto__求指教,感觉这么写很古怪!这里还有个问题Universe=function Universe(){return instance;};应当写在instance=new Universe();之后好一点吧,这样Universe.prototype=this;这句是不是可以省略不写。刚才测试了一下,你应该是这样调用var t=Universe();那这个问题又来了this指向的是window...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby