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类的原型,找它“爷爷”,所谓原型链嘛。

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

  • 相关阅读:
    系统结构实践——第一次作业
    个人作业——软件工程实践总结作业
    个人作业——软件评测
    软件工程第五次作业--结队编程
    软件工程第四次作业--结队作业
    第一次个人编程作业
    第一次软工作业
    java第五周上机练习
    Java作业5
    java4
  • 原文地址:https://www.cnblogs.com/xinchuang/p/2295318.html
Copyright © 2011-2022 走看看