zoukankan      html  css  js  c++  java
  • 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的例子充分体会到通过对象冒充和原型链类继承的差别,一般来说属性需用对象冒充方式继承,方法需用原型链方式继承。

  • 相关阅读:
    iOS各种证书
    Error No matching provisioning profiles found
    iOS 一个开发者账号 多台Mac 共用
    外中断(学习汇编)
    端口(学习汇编)
    8086CPU寄存器
    int指令(学习汇编)
    内中断(学习汇编)
    标志寄存器(学习汇编)
    CALL和RET指令(学习汇编)
  • 原文地址:https://www.cnblogs.com/zhilu/p/14212468.html
Copyright © 2011-2022 走看看