課程
/前端開發
/JavaScript
/側邊欄信息展示效果
為什么要加var sideBar=new Sidebar()在最后,而且SideBar跟new Sidebar有什么區別?這一句真不懂。
2017-01-04
源自:側邊欄信息展示效果 3-3
正在回答
問題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();//重新去創建
}
慕仙4324424 提問者
舉報
頂級大牛分享開發經驗,學會實現側邊欄內容效果展示,讓你迅速進階
1 回答JS單……單元測試怎么寫??? 好虛啊……
2 回答老師的sublime都裝了什么插件呀?
1 回答想知道老師的sublime都用了些什么插件.
2 回答一個bug
1 回答頁面的第一次點擊是正常,然后的就需要點擊2次?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-01-08
問題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();//重新去創建
}