js 用Class.create方法來創建類


/** obsolete syntax **/    
var Person = Class.create();    //通過Class.create方法創建空類   
Person.prototype = {               //把方法定義到prototype中,注意,是通過initalize方法初始化類的屬性和數據   
  initialize: function(infor) {    
    this.name = infor.name; 

  this.sex  = infor.sex; 
  },    
  say: function(message) {    
    return this.name + ': ' + message;    
  }    
};  

 

var guy = new Person('Miro');    //實例化一個新的person,叫做guy,帶着一個參數Miro
guy.say('hi');    

//結果是

// -> "Miro: hi"    

 

 

//prototype中的繼承方式:   
var Pirate = Class.create();    //建立空類;   
// inherit from Person class:    
Pirate.prototype = Object.extend(new Person(), {    //先實例化超類,再把超類中的方法復制到子類中去,   
  // redefine the speak method                               //注意,實際上prototype類定義機制中並沒有直接定義   
say: function(message) {                                       //類的屬性而是通過intilize方法,而且所有的方法都   
    return this.name + ': ' + message + ', yarr!';      //之直接定義在prototype中,所以直接用原型鏈方式   
  }                                                                        //繼承超類的所有方法不會產生問題。   
});   

var john = new Pirate('Long John');    //實例化一個新的Pirate,叫做john,帶着一個參數Long John'
john.say('ahoy matey');    
// -> "Long John: ahoy matey, yarr!"   

 

 

來看一下Class.create方法的實現代碼

var Class = {   
  create: function() {   
    return function() {                                          //實際上把所有的屬性定義到intiliaze方法(實際上是一個類)中,   
      this.initialize.apply(this, arguments);              //然后通過對象冒充方式繼承該類   
    }   
  }   
}             
可以從prototype的例子充分體會到通過對象冒充和原型鏈類繼承的差別,一般來說屬性需用對象冒充方式繼承,方法需用原型鏈方式繼承。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM