1. 程式人生 > >js面向對象面試資料

js面向對象面試資料

all null 時間戳 其他 apply() expr left 保持 原型對象

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原型,原型鏈 ? 有什麽特點?

原型對象也是普通的對象,是對象一個自帶隱式的

__proto__ 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不為null的話,我們就稱之為原型鏈。*

原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。

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面向對象面試資料