javascript建立安全的建構函式
在javascript中,任何一個函式都可以作為建構函式,只要使用new運算子呼叫一個函式,那麼這個函式就是被當做建構函式使用,程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼function antzone(webName){ this.name=webName; } var oantzone=new antzone("螞蟻部落"); console.log(oantzone.name);
以上程式碼就是將antzone作為建構函式使用。
antzone作為建構函式使用的時候是沒有任何問題的,但是如果作為普通的函式使用,this的指向就有可能是其他物件,那麼就有可能造成汙染,下面就將此程式碼進行一下改造,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼function antzone(webName){ if(this instanceof antzone){ this.name=webName; } else{ return new antzone(webName) } }
上面程式碼就可以構建一個相對安全的建構函式,下面就對程式碼的程式碼做一下分析:
首先判斷this是否是antzone建構函式的例項,如果是的話,那麼antzone就是作為建構函式使用,否則就是作為普通函式,當作為普通函式的時候,就強行作為建構函式使用。
特別說明:
如果上面的使用call()或者appy()方式被其他建構函式繼承的時候,需要做一下改造,因為在預設狀態下this instanceof antzone返回值一般是false,不過如果其他函式繼承自antzone就可以了,演示程式碼如下:
[JavaScript] 純文字檢視 複製程式碼function antzone(webName){ if(this instanceof antzone){ this.name=webName; } else{ return new antzone(webName) } } function func(){} func.prototype=new antzone(); func.prototype.constructor=func; var ofunc=new func(); antzone.call(ofunc,"螞蟻部落"); console.log(ofunc.name);
將func的原型設定為antzone的例項,func就是繼承於antzone,則this instanceof antzone返回值為true。
相關文章
- JavaScript 建構函式JavaScript函式
- 建構函式建立物件函式物件
- JavaScript Date()建構函式JavaScript函式
- javascript Function()建構函式JavaScriptFunction函式
- 作用域安全的建構函式函式
- JavaScript建構函式和普通函式的區別JavaScript函式
- Javascript 之中的 class/建構函式/工廠函式JavaScript函式
- 回顧Javascript建構函式JavaScript函式
- javascript基礎(this,工廠方法來建立物件,建構函式建立物件)(十六)JavaScript物件函式
- javascript建構函式的返回值JavaScript函式
- 【譯】JavaScript 工廠函式 vs 建構函式JavaScript函式
- Javascript繼承2:建立即繼承—-建構函式繼承JavaScript繼承函式
- 私有建構函式的物件建立例項函式物件
- Golang建立建構函式的方法詳解Golang函式
- 建構函式方式建立正規表示式函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- 類的建構函式和解構函式函式
- javascript:建構函式模式(為什麼這種方式也可以建立物件)JavaScript函式模式物件
- 建構函式與解構函式函式
- javascript建構函式的繼承簡單介紹JavaScript函式繼承
- JavaScript進階系列03,通過硬編碼、工廠模式、建構函式建立JavaScript物件JavaScript模式函式物件
- ## 建構函式函式
- 建構函式函式
- 你不知道的JavaScript--Item8 函式,方法,建構函式呼叫JavaScript函式
- 如何寫一個作用域安全的建構函式函式
- js Date()建構函式建立時間日期物件JS函式物件
- Java的建構函式Java函式
- 建構函式的作用函式
- [譯] 建構函式已死,建構函式萬歲!函式
- 建立派生類物件,建構函式的執行順序物件函式
- C/C++——建構函式、複製建構函式和解構函式的執行時刻C++函式
- C++ 建構函式和解構函式C++函式
- [JavaScript]原型、原型鏈、建構函式與繼承JavaScript原型函式繼承
- JavaScript建構函式,物件導向程式設計JavaScript函式物件程式設計
- javascript建構函式的返回值問題介紹JavaScript函式
- Javascript 物件導向中的建構函式和原型物件JavaScript物件函式原型
- 關於建構函式與解構函式的分享函式
- c# tcbs之建構函式呼叫建構函式示例C#函式