js面向對象面試資料
js面向對象面試資料
1 說說你對閉包的理解
使用閉包主要是為了設計私有的方法和變量。閉包的優點是可以避免全局變量的汙染,缺點是閉包會常駐內存,會增大內存使用量,使用不當很容易造成內存泄露。
閉包有三個特性:
1.函數嵌套函數
2.函數內部可以引用外部的參數和變量
3.參數和變量不會被垃圾回收機制回收
2、call() 和 .apply() 的區別和作用?
作用:動態改變某個類的某個方法的運行環境。
1、call,apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,因為屬於Function.prototype,所以每個Function對象實例(就是每個方法)都有call,apply屬性。既然作為方法的屬性,那它們的使用就當然是針對方法的了,這兩個方法是容易混淆的,因為它們的作用一樣,只是使用方式不同。
2、語法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);
3、相同點:兩個方法產生的作用是完全一樣的。
4、不同點:方法傳遞的參數不同。
3、javascript裏面的繼承怎麽實現,如何避免原型鏈上面的對象共享
用構造函數和原型鏈的混合模式去實現繼承,避免對象共享可以參考經典的extend()函數,很多前端框架都有封裝的,就是用一個空函數當做中間變量
4、JavaScript原型,原型鏈 ? 有什麽特點?
原型對象也是普通的對象,是對象一個自帶隱式的
原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。
5、你如何對網站的文件和資源進行優化
期待的解決方案包括:
文件合並
文件最小化/文件壓縮
使用 CDN 托管
緩存的使用(多個域名來提供緩存)
其他
6、請說出三種減少頁面加載時間的方法。
1.優化圖片
2.圖像格式的選擇(GIF:提供的顏色較少,可用在一些對顏色要求不高的地方)
3.優化CSS(壓縮合並css,如margin-top,margin-left...)
4.網址後加斜杠(如www.campr.com/目錄,會判斷這個“目錄是什麽文件類型,或者是目錄。)
5.標明高度和寬度(如果瀏覽器沒有找到這兩個參數,它需要一邊下載圖片一邊計算大小,如果圖片很多,瀏覽器需要不斷地調整頁面。這不但影響速度,也影響瀏覽體驗。
當瀏覽器知道了高度和寬度參數後,即使圖片暫時無法顯示,頁面上也會騰出圖片的空位,然後繼續加載後面的內容。從而加載時間快了,瀏覽體驗也更好了。)
6.減少http請求(合並文件,合並圖片)。
7、javascript繼承的6種方法
1,原型鏈繼承
2,借用構造函數繼承
3,組合繼承(原型+借用構造)
4,原型式繼承
5,寄生式繼承
6,寄生組合式繼承
javascript對象的幾種創建方式
1,工廠模式
2,構造函數模式
3,原型模式
4,混合構造函數和原型模式
5,動態原型模式
6,寄生構造函數模式
7,穩妥構造函數模式
8、你有哪些性能優化的方法?
(詳情請看雅虎14條性能優化原則)。
(1) 減少http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN托管,data緩存 ,圖片服務器。
(2) 前端模板 JS+數據,減少由於HTML標簽導致的帶寬浪費,前端用變量保存AJAX請求結果,每次操作本地變量,不用請求,減少請求次數
(3) 用innerHTML代替DOM操作,減少DOM操作次數,優化javascript性能。
(4) 當需要設置的樣式很多時設置className而不是直接操作style。
(5) 少用全局變量、緩存DOM節點查找的結果。減少IO讀取操作。
(6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。
(7) 圖片預加載,將樣式表放在頂部,將腳本放在底部 ?加上時間戳。
9平時如何管理你的項目?
1先期團隊必須確定好全局樣式(globe.css),編碼模式(utf-8) 等;
2 編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行);
3 標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方);
4 頁面進行標註(例如 頁面 模塊 開始和結束);
5 CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css);
6 JS 分文件夾存放 命名以該JS功能為準的英文翻譯。
10、什麽是閉包,閉包什麽情況會導致內存溢出?
直接來講,閉包就是能夠讀取其他函數內部變量的函數,在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成"定義在一個函數內部的函數",所以,在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。閉包最大用處有兩個,一個是可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中。
閉包引起內存泄露的原因有兩種:
1. 循環引用導致了內存泄漏
2. 由外部函數調用引起的內存泄漏
避免內存泄漏
1. 打破循環引用
2. 添加另一個閉包
3. 避免閉包自身
解決閉包:用完直接==null;
js面向對象面試資料