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

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

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

隔江千里 2019-02-07 11:07:48
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的旧构造函数还是被置换后的新构造函数呢?
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

重置是什么时候开始生效的?
答:重置是在第一次执行Universe时生效的,不调用Universe不会引发重置.

new Universe();到底是new的旧构造函数还是被置换后的新构造函数呢?
答:new Universe(); 创建的是被置换后的新构造函数.因为在new Universe()之前重定义了
Universe=function Universe(){
return instance;
};
Universe.prototype=this; //这里把旧构造函数里的成员都继承过来了
已经重写了旧的构造函数。所以这里new 的是新的构造函数

查看完整回答
反对 回复 2019-03-25
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

Universe.prototype=this;这个很迷惑,构造函数内部的this应当是指向实例的,如果要保留原型属性应该是这么写的吧,Universe.prototype=this.__proto__求指教,感觉这么写很古怪!这里还有个问题

Universe=function Universe(){
return instance;
};
应当写在instance=new Universe();之后好一点吧,这样Universe.prototype=this;这句是不是可以省略不写。
刚才测试了一下,你应该是这样调用var t=Universe();那这个问题又来了this指向的是window...


查看完整回答
反对 回复 2019-03-25
  • 2 回答
  • 0 关注
  • 665 浏览

添加回答

举报

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