zoukankan      html  css  js  c++  java
  • javascript面向对象继承

       什么是继承,你懂的。在javascript中实现继承,目前见过这么几种方法:

    1. call和apply

        这两个方法作用差不多,用法不同。区分他们:
    obj.call(this, arg1,arg2,arg3) == obj.apply(this, arguments)==this.obj(arg1, arg2, arg3)

    call的第一个以外的参数是单个出现的,apply第一个以外的参数是以数组形式出现的;

    他们可以使this具有obj的功能【我这么理解的】。看下代码1里如何使用calll和apply实现继承:

    代码1:

     1 function Person(age, name) {
    2 this.age = age;
    3 this.name = name;
    4 this.ShowAge = function () { alert("my age:"+age); }
    5 }
    6 function Baby(age,name) {
    7 person.call(this, age, name);//可以换成 person.Apply(this,[age,name]);
    8 }
     9 var baby= new Baby(2, "aa");
    10 baby.ShowAge(); //执行,弹出结果:my age:2

    代码1中有两个类:person和baby,baby的构造函数中,person类名调用call方法,使得baby类有了person类的能力。

    代码第9行,创建baby类的对象,调用父类方法ShowAge()。

    javascript 里可以用instanceof来测试一个对象是否是一个类的实例。 那么上段代码, alert(baby instanceof Person)

    结果是false!

    也就是说call,apply只是模拟了继承,山寨的哦。

    2:原型继承
    每一个类都有原型。如果一个类A的原型是某个对象B,于是乎A会继承B的类。

     1   function Person(age, name) {
    2 this.age = age;
    3 this.name = name;
    4 this.show = function () { alert("my age:"+age); }
    5 }
    6 function Baby(age,name) {
    7
    8
    9 }
    10 Baby.prototype = new Person(12, "aa");
    11 var baby = new Baby(12, "aa");
    12 baby.show();
    13 alert(baby instanceof Person);

    javascript在执行那个show方法时,先找Baby类本身有没有,然后去找原型,他的原型是Person对象,于是找Person类,执行了Person类的show方法。如果Person类里没有show方法呢?同样的道理,你懂的,会接着往上,就是找Person类的原型,找它“爷爷”,所谓原型链嘛。

    其他的继承方法。没记住,就不记录啦

  • 相关阅读:
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作
    第四次作业
    第三次作业
    012黄意芳
    test指令的测试功能
    date命令
    zendstudio 10 项目导入乱码的解决
    用modelsim和debussy协同仿真VHDL Verilog的流程
    使用Debussy+ModelSim快速查看前仿真波形
  • 原文地址:https://www.cnblogs.com/xinchuang/p/2295318.html
Copyright © 2011-2022 走看看