從內至外去理解:- function MyConstructor(id) {
- this.id = id;
- this.init();
- }
複製代碼 定義左一個function, 亦都係一個名稱係"MyConstructor" 既class 既object instance. 呢個"class" 入面有一個member variable "id", 而亦會執行呢個class 既 method "init". 但係直至目前為止, "MyConstructor" 都無"init" method. 不過由於重未執行"MyConstructor", 所以唔會出問題.- MyConstructor.prototype = {
- init : function() { // function expression.
- // block statement with label.
- incrementI : {
- // Function scope (no block scope).
- var x = 10;
- }
- this.id += x;
- },
- toString : function() {
- return "MyConstructor: id = " + this.id;
- }
- };
複製代碼 呢段code 嘗試attach 更多method 到 MyConstructor class. 加入左 method "init" 同埋 method "toString". 到此, 原本不存在既method "init" 就有左目的地. method "init" 入面, "incrementI" 所定義既係一個code block, 注意呢個宣告係無 function() 字樣, 即係呢個code block 會即時執行, 並係其中宣告左一個local variable x, 數值為10. 然後method "init" 將MyConstructor object 既member variable id 加 10. method "toString" 負責印出"MyConstructor: id=XXX" 既訊息, 呢個toString 係之後我地會見到用法.- var c = (function(id){
- // ..... deleted
- return new MyConstructor(id); // statement.
- })(12);
複製代碼 成段code 最外圍其實定義左一個function. 呢個function 入面定義左以上所講既class "MyConstructor". 呢個function 實際要執行既只係一句 "return new MyConstructor(id);". 呢個constructor 建立左一個MyConstructor object 之後, 執行上面設定id 數值同埋呼叫method 兩句. 有左呢個function 既定義, 最既(12)就係呼叫呢個無名function. 代入 id=12, 係建立MyConstructor object 之時, 執行init 令id 變成12+10 = 22. 呢個function 就傳回一個MyConstructor object 而裏面既id 既數值係22.
當我地evaluate c+"" 既時候, Javascript 會嘗試將c 變成一個String, 於是佢會呼叫呢個object instance 既 toString method, 結果印出 "MyConstructor: id=22" 呢個結果....
其實我都唔係好熟Javascript, 你俾左個機會我檢查下我係咪真係明, 上面既描述有錯請插. |