zoukankan      html  css  js  c++  java
  • 20120112继承 js

    有很多时间我都想将js的继承方法好好的总结一下,可一直就是没有时间,总结的怎么样,也就见仁见智了。

    javascript中没有类的概念,与类相关的继承的概念更是无从谈起,但是我们可以通过特殊的语法来模拟面向对象语言中的继承。

    在js中模拟继承有多种方法,其中寄生组合模式是一种比较容易简单的模拟继承模式,下面是一个例子:

      js的继承包括属性的继承和方法的继承,他们分别通过不同的方法来实现。

     1、属性的继承

         属性的继承通过改变函数的执行环境来实现。而改变函数的执行环境可以通过使用call()和apply()两种方法来实现。

         我们首先创建一个animal"类"(实际上就是一个function函数对象)  

    funciton animal(name){
        this.name=name;
    }
    function lion(){
         animal.apply(this,["狮子"]);
    }
    

     这里使用了animal的apply方法,把animal的执行环境改成lion被调用时的执行环境。

     这里要解释一下,我们如果想使用lion这个“类”,通常需要new一个lion。如:

       var obj = new lion();

     而new 关键字做了一下工作:

        1、开辟堆空间,已准备存储lion对象

        2、修改lion对象本身的执行环境,是的lion函数的this指向了lion函数对象本省。

        3、调用lion“类”的“构造函数”,创建lion对象

        4、将lion函数对象的堆地址赋给变量obj,这个时候obj就指向了这个lion函数对象

      所以经过new关键字以后,animal.apply(this,["狮子"])中的this就已经指向lion对象啦

    2、方法的继承

        在js中每个“类”(即函数,注意不是函数对象)都有一个prototype属性,prototype表示函数的原型,也表示一个类的成员的集合(通常是方法的集合)。我们可以通过函数的prototype属性来实现方法的继承

         我们同样首先创建一个animal“类”

    funciton animal(name){
         this.name = name;
    }
    animal.prototype.eat = function(){
         alert("去吃饭啦。。")
    }
    function lion(){
         animal.apply(this,["狮子"])
    //animal.all(this,["狮子"])
     } //注意下面的代码,我们马上要完成方法的继承了 lion.prototype = new animal();

     这样就把animal函数对象存储在了lion的原型中了,lion也就包含了animal中的方法了(其实就是包含了属性)。

  • 相关阅读:
    [转] Foobar2000 DSP音效外挂元件-Part4
    谷歌三件套
    Android 线刷小白教程
    nginx负载均衡
    HTTPS证书
    防火墙iptables
    LNMP架构部署
    tomcat部署
    shell编程
    HTTP协议
  • 原文地址:https://www.cnblogs.com/GenghisKhan/p/2320368.html
Copyright © 2011-2022 走看看