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

js太差,这个都要问。。。。

为什么要加var sideBar=new Sidebar()在最后,而且SideBar跟new Sidebar有什么区别?这一句真不懂。

正在回答

1 回答

问题1:

new Sidebar只是一个构造函数,他就像一个生产对象的工具,没人用他,他只会静静的躺在那里。加了括号()后,他变成了new Sidebar(),这个括号意味着他被调用了,他调用了会产生一个东西,我们称呼这个东西叫实例对象,实例对象拥有构造函数内定义的属性和方法。

但是我们生产出来了一个对象,总要有变量来接受他呀,所有我们var sidebar这个变量来接收new Sidebar()产生的对象。就像我们要 var str =‘abc’一样

如果你是使用 var sideBar = Sidebar(),这样不会创建实例对象,而是产生了全局变量,因为此时Sidebar里面一大堆this都是指向的window,你执行 var sideBar = Sidebar()就等于做了

window.state="opened";

window.el=document.....这样的

问题2:

如果你使用var sideBar = new Sidebar(),程序会做三件事情

1.创建了一个空对象sideBar

2.我们将这个空对象的proto成员指向了Sidebar函数对象prototype成员的对象

3.我们将Sidebar函数对象的this指针替换成sidebar,然后再调用Sidebar对象

如果你觉得这三件事情有些绕,你就可以理解成new这个关键字会创造一个对象,让这个对象来接受构造函数的实行和方法,而不是让window来接收。

所以忘记写new是很危险的事情,如何避免?很简单

在构造函数前加一个判断

if(!this instanceof Sidebar){//如果这个创建的对象不是sidebar类型的

    return new Sidebar();//重新去创建

}


0 回复 有任何疑惑可以回复我~
#1

慕仙4324424 提问者

非常感谢!
2017-01-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

js太差,这个都要问。。。。

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号