首頁 > web前端 > js教程 > 主體

javascript類別建構函數和自己更新自己函數程式碼實例詳解

伊谢尔伦
發布: 2017-07-25 13:47:47
原創
1785 人瀏覽過

類別建構子
JavaScript的函數同時作為類別的建構函數,因此只要宣告一個函數就可以使用new關鍵字建立類別的實例。

 function Person(name) { 
   this.name = name; 
   this.toString = function() { 
     return 'Hello, ' + this.name + '!'; 
   }; 
 } 
   
 var p = new Person('Ghostheaven'); 
 alert(p); // Hello, Ghostheaven!
登入後複製

在上述實例中Person函數作為類別的建構函式使用,此時this指向新建立的實例對象,可以為實例增加屬性和方法,關於詳細的物件導向的JavaScript程式設計可以參考這篇文章。這裡我想說的是,JavaScript函數作為類別建構函數使用時的回傳值問題。

 function MyClass(name) { 
   this.name = name; 
   return name;  // 构造函数的返回值? 
 } 
   
 var obj1 = new MyClass('foo'); 
 var obj2 = MyClass('foo'); 
 var obj3 = new MyClass({}); 
 var obj4 = MyClass({});
登入後複製

上面的建構子比較特別,有回傳語句,那麼obj1~obj4分別指向什麼物件呢?實際結果是這樣的:

obj1 = MyClass对象
obj2 = 'foo'
obj3 = {}
obj4 = {}
登入後複製

Function類別
在JavaScript執行時中有一個內建的類別叫做Function,用function關鍵字宣告一個函數其實是建立Function類別物件的一種簡寫形式,所有的函數都擁有Function類別的所有方法,例如call、apply、bind等等,可以透過instanceof關鍵字來驗證這個說法。
既然Function是一個類,那麼它的建構子就是Function(它本身也是Function類別的物件),應該可以透過new關鍵字來產生一個函數物件。第一個妖怪來了,就是如何用Function類別建構一個函式。 Function的語法如下:

new Function ([arg1[, arg2[, ... argN]],] functionBody)
登入後複製

其中arg1, arg2, ... argN是字串,代表參數名稱,functionBody也是字串,表示函數體,前面的參數名稱是可多可少的,Function的建構子會把最後一個參數當做函數體,前面的都當作參數處理。

var func1 = new Function('name', 'return "Hello, " + name + "!";'); 
 func1('Ghostheaven'); // Hello, Ghostheaven!
登入後複製

以上方法就透過Function建構了一個函數,這個函數跟其他用function關鍵字宣告的函數一模一樣。
Function類別有它獨特的用途,你可以利用它動態地產生各種函數邏輯,或是取代eval函數的功能,而且能保持目前環境不會被污染*。

自更新函數
在許多語言中,函數一旦宣告過就無法再宣告同名函數,否則會產生語法錯誤,而在JavaScript中的函數不僅可以重複聲明,而且還可以自行更新自己。自己吃自己的妖怪來了!

function selfUpdate() { 
   window.selfUpdate = function() { 
     alert('second run!'); 
   }; 
   
   alert('first run!'); 
 } 
   
 selfUpdate(); // first run! 
 selfUpdate(); // second run!
登入後複製

這種函數可以用來只運行一次的邏輯,在第一次運行之後就整個替換成一段新的邏輯。

以上是javascript類別建構函數和自己更新自己函數程式碼實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板