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建構函式JavaScript函式
- 【譯】JavaScript 工廠函式 vs 建構函式JavaScript函式
- Javascript繼承2:建立即繼承—-建構函式繼承JavaScript繼承函式
- Golang建立建構函式的方法詳解Golang函式
- 私有建構函式的物件建立例項函式物件
- 建構函式方式建立正規表示式函式
- javascript:建構函式模式(為什麼這種方式也可以建立物件)JavaScript函式模式物件
- 類的建構函式和解構函式函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- 你不知道的JavaScript--Item8 函式,方法,建構函式呼叫JavaScript函式
- 建構函式與解構函式函式
- ## 建構函式函式
- 建立派生類物件,建構函式的執行順序物件函式
- 如何寫一個作用域安全的建構函式函式
- JavaScript建構函式,物件導向程式設計JavaScript函式物件程式設計
- [JavaScript]原型、原型鏈、建構函式與繼承JavaScript原型函式繼承
- C++ 建構函式和解構函式C++函式
- 關於建構函式與解構函式的分享函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- 工廠模式建立物件和自定義建構函式建立物件的異同模式物件函式
- 建構函式與普通函式的區別函式
- 詳解 JavaScript 建構函式和 "new" 操作符JavaScript函式
- JavaScript物件導向之二(建構函式繼承)JavaScript物件函式繼承
- PHP筆記:建構函式與解構函式PHP筆記函式
- javascript中初始化建構函式時new所起的作用JavaScript函式
- JavaScript教程全套影片合集:建構函式內容講解JavaScript函式
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- swoole 服務的建構函式函式
- js建構函式的繼承JS函式繼承
- 建構函式之間的呼叫函式
- 繼承中的建構函式繼承函式
- 建構函式和類函式
- 初識建構函式函式
- 建構函式詳解函式
- 11-建構函式函式
- C++入門記-建構函式和解構函式C++函式