国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中的高級函數

2024-05-06 15:22:56
字體:
來源:轉載
供稿:網友

在JavaScript中,函數的功能十分強大。它們是第一類對象,也可以作為另一個對象的方法,還可以作為參數傳入另一個函數,不僅如此,還能被一個函數返回!可以說,在JS中,函數無處不在,無所不能,堪比孫猴子呀!當你運用好函數時,它能助你取西經,讓代碼變得優雅簡潔,運用不好時,那就遭殃了,要大鬧天宮咯~

除了函數相關的基礎知識外,掌握一些高級函數并應用起來,不僅能讓JS代碼看起來更為精簡,還可以提升性能。以下是小編總結的一些常用的、重要的高級函數,加上了一些個人見解,特此記錄下來。如果您是JS初學者,也不要被“高級”兩個字嚇到,因為文中穿插講解了一些原型、this等基礎知識,相信并不難理解。如果您是JS大牛,也可以把本文用來查漏補缺。

正文

作用域安全的構造函數

function Person(name,age){ this.name = name; this.age = age;}var p1 = new Person("Claiyre",80);

相信您對上面的構造函數一定不陌生,但是,,如果某個粗心的程序猿調用這個構造函數時忘記加 new 了會發生什么?

var p3 = Person("Tom",30);console.log(p3);    //undefinedconsole.log(window.name);  //Tom

由于使用了不安全的構造函數,上面的代碼意外的改變了window的name,因為 this 對象是在運行時綁定的,使用new調用構造函數時 this 是指向新創建的對象的,不使用 new 時, this 是指向window的。

由于window的name屬性是用來識別鏈接目標和frame的,所在這里對該屬性的偶然覆蓋可能導致其他錯誤。

作用域安全的構造函數會首先確認 this 對象是正確類型的實例,然后再進行更改,如下:

function Person(name,age){ if(this instanceof Person){ this.name = name; this.age = age; } else { return new Person(name,age); } }

這樣就避免了在全局對象上意外更改或設置屬性。

實現這個安全模式,相當于鎖定了調用構造函數的環境,因此借用構造函數繼承模式可能會出現問題,解決方法是組合使用原型鏈和構造函數模式,即組合繼承。

如果您是一個JS庫或框架的開發者,相信作用域安全的構造函數一定對您非常有用。在多人協作的項目中,為了避免他們誤改了全局對象,也應使用作用域安全的構造函數。

惰性載入函數

由于瀏覽器間的行為差異,代碼中可能會有許多檢測瀏覽器行為的if語句。但用戶的瀏覽器若支持某一特性,便會一直支持,所以這些if語句,只用被執行一次,即便只有一個if語句的代碼,也比沒有要快。

惰性載入表示函數執行的分支僅會執行一次,有兩種實現惰性載入的方式,第一種就是在函數第一次被調用時再處理函數,用檢測到的結果重寫原函數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 深州市| 石城县| 莱州市| 喀什市| 泽州县| 文登市| 南丹县| 仙游县| 台山市| 丽江市| 绥阳县| 古蔺县| 涟源市| 罗源县| 纳雍县| 吉水县| 城市| 襄樊市| 广东省| 黄龙县| 定襄县| 湘阴县| 澎湖县| 乌兰察布市| 大宁县| 读书| 金乡县| 黄冈市| 濮阳市| 大田县| 麦盖提县| 华池县| 东兰县| 玉龙| 许昌市| 科技| 沿河| 隆林| 高碑店市| 北京市| 荆州市|