亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號