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中的方法了(其实就是包含了属性)。

  • 相关阅读:
    js 性能调试
    js 面向对象编程
    js 零碎
    如果遇到二维数组 想取某个字段的和
    昨天写支付接口时遇到支付接口返回数据接收地址,session数据丢失(或者说失效)的问题
    mysql报错: 1548-Cannot load from mysql.proc. The table is probably corrupted 解决办法
    php 时间倒计时代码 个人写法 有好的想法的欢迎贴出来分享
    linux 环境下安装mysql5.6
    关于数据库连接不上 出现错误的问题
    推荐一个不错的css3网站 可以直接调用的
  • 原文地址:https://www.cnblogs.com/GenghisKhan/p/2320368.html
Copyright © 2011-2022 走看看