国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript創建構造函數時作用域安全,即怎樣保證一直都是構造函數

Shihira / 1026人閱讀

摘要:在使用利用面向對象的思想創建類和對象時,通常是使用構造函數,工廠方式,原型方式,原型構造函數方式等。

在使用javascript利用面向對象的思想創建類和對象時,通常是使用構造函數,工廠方式,原型方式,原型構造函數方式等。
構造函數其實就是使用一個使用new操作符調用函數,當使用new調用時,構造函數內用到的this對象會指向新創建的對象實例,例如:

function Person(name, age){
    this.name = name;
    this.age = age;
}

var p1 = new Person("summer", 28)

上述例子Person構造函數使用this對象給兩個屬性賦值:name,age。當使用new操作符新建一個變量p1,即創建了一個新的對象,同時this指向當前的p1對象。
這是利用構造函數創建對象的情況,當不使用new操作符時,將Person當做普通函數調用,由于該this對象是在運行時綁定的,所以直接調用Person(),這時this會映射到全局對象window上這時就污染了全局window對象,例如:

var p1 = Person("summer", 28);
console.log(window.age); //28
console.log(p1.age);//報錯


發現原本針對Person實例的屬性被加到了全局window對象上,構造函數作為普通函數調用,由于this對象的晚綁定造成的,這里this被解析成window對象,這樣污染了全局屬性window.name。
為了保證每次的構造函數都創建一個對象,即不允許作為普通函數調用,解決方法是創建一個作用域安全的構造函數.

首先判斷this對象是正確的類型實例,如果不是,那么就會創建新的實例并且返回該實例對象。

如下所示:

function Person(name, age){
    if(this instanceof Person){//判斷this是否指向Person
        this.name = name;
        this.age = age;
    }else{
        return new Person(name,age);//返回一個新的對象
    }
}

var p1 = Person("summer", 28);
console.log(window.name);//""
console.log(p1.name);//summer

如下所示:

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78842.html

相關文章

  • JavaScript-面試

    摘要:表示沒有對象,即該處不應該有值。閉包的形成允許使用內部函數,可以將函數定義和函數表達式放在另一個函數的函數體內。使用閉包可以減少全局環境的污染,也可用延續變量的生命。所以在閉包不用之后,將不使用的局部變量刪除,使其被回收。 1.javaScript的數據類型有什么 Undefined、Null、Boolean、Number、String 2.檢測數據類型有什么方法 typeof typ...

    fantix 評論0 收藏0
  • javascript高級程序設計》第六章 讀書筆記 之 javascript對象的幾種創建方式

    摘要:三種使用構造函數創建對象的方法和的作用都是在某個特殊對象的作用域中調用函數。這種方式還支持向構造函數傳遞參數。叫法上把函數叫做構造函數,其他無區別適用情境可以在特殊的情況下用來為對象創建構造函數。 一、工廠模式 工廠模式:使用字面量和object構造函數會有很多重復代碼,在此基礎上改進showImg(https://segmentfault.com/img/bVbmKxb?w=456&...

    xiaotianyi 評論0 收藏0
  • 關于javascript 中的高級定器的若干問題

    摘要:閉包閉包是指有權訪問另一個函數作用域中的變量的函數當某個函數被調用時,會創建一個執行環境及相應的作用域鏈。要注意通過第句聲明的這個方法屬于構造函數生成的對象,而不屬于構造函數的變量對象,也就是說,并不存在于作用域鏈中。 看到評論里有仁兄建議我試試箭頭函數,真是受寵若驚,本來寫這篇文章也只是想記錄寫要點給自己日后看的。今天早上看到一篇總結javascript中this的文章JavaScr...

    zr_hebo 評論0 收藏0
  • JavaScript閉包

    摘要:此時的作用域鏈包含了兩個對象的活動對象和對象。閉包的應用場景保護函數內的變量安全。依然如前例,由于閉包,函數中的一直存在于內存中,因此每次執行,都會給自加。 引子 JS的閉包一直是很多人不理解,也是在使用過程中經常出現問題的地方。每次看文章都會有所了解閉包,但是,用起來還是不對,而且錯誤百出,其關鍵問題還是出在對其不理解,不了解。此文章會不定期更新以及完善,希望在我學習的時候,讓大家也...

    Tony 評論0 收藏0
  • 前端基本功-常見概念(一)

    摘要:前端基本功常見概念一點這里前端基本功常見概念二點這里前端基本功常見概念三點這里什么是原型鏈當一個引用類型繼承另一個引用類型的屬性和方法時候就會產生一個原型鏈。函數式編程是聲明式而不是命令式,并且應用程序狀態通過純函數流轉。 前端基本功-常見概念(一) 點這里前端基本功-常見概念(二) 點這里前端基本功-常見概念(三) 點這里 1.什么是原型鏈 當一個引用類型繼承另一個引用類型的屬性和方...

    bladefury 評論0 收藏0

發表評論

0條評論

Shihira

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<