zoukankan      html  css  js  c++  java
  • javascript面向对象中继承实现?

    面向对象的基本特征有:封闭、继承、多态。

    在JavaScript中实现继承的方法:

    1. 原型链(prototype chaining)

    2. call()/apply()

    3. 混合方式(prototype和call()/apply()结合)

    4. 对象冒充

    继承的方法如下:

    1、prototype原型链方式:

    function teacher(name){
        this.name = name;
    }
    teacher.prototype.sayName = function(){
        console.log("name is "+this.name);
    }
    var teacher1 = new teacher("xiaoming");
    teacher1.sayName();
    
    function student(name){
        this.name = name;
    }
    student.prototype = new teacher()
    var student1 = new student("xiaolan");
    student1.sayName();
    //  name is xiaoming
    //  name is xiaolan
    2、call()/apply()方法
    function teacher(name,age){
        this.name = name;
        this.age = age;
        this.sayhi  = function(){
          alert('name:'+name+",  age:"+age);
       }
    }
    function student(){
      var args = arguments;
      teacher.call(this,args[0],args[1]);
      // teacher.apply(this,arguments);
    }
    var teacher1 = new teacher('xiaoming',23);
    teacher1.sayhi();
    
    var student1 = new student('xiaolan',12);
    student1.sayhi();
    
    // alert: name:xiaoming,  age:23
    // alert: name:xiaolan,  age:12
    3、混合方法【prototype,call/apply】
    function teacher(name,age){
       this.name = name;
       this.age = age;
    }
    teacher.prototype.sayName = function(){
       console.log('name:'+this.name);
    }
    teacher.prototype.sayAge = function(){
       console.log('age:'+this.age);
    }
    
    function student(){
      var args = arguments;
      teacher.call(this,args[0],args[1]);
    }
    student.prototype = new teacher();
    
    var student1 = new student('xiaolin',23);
    student1.sayName();
    student1.sayAge();
    // name:xiaolin
    // age:23
    4、对象冒充
    function Person(name,age){
       this.name = name;
       this.age = age;
       this.show = function(){
             console.log(this.name+",  "+this.age);
       }
    }
    
    function Student(name,age){ 
       this.student = Person;       //将Person类的构造函数赋值给this.student
       this.student(name,age);   //js中实际上是通过对象冒充来实现继承的
       delete this.student;           //移除对Person的引用
    }
    
    var s = new Student("小明",17);
    s.show();
    
    var p = new Person("小花",18);
    p.show();
    // 小明,  17
    // 小花,  18

    .

  • 相关阅读:
    linux安装mongo-c-driver
    DPDK在虚拟机上运行时,报错: Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x82a1d in rte_eth_dev_configure()
    用python写xml文件
    openvas在centos中扫描单项的python实现
    ARP协议的报文格式
    python装饰器使用
    openvas漏洞扫描:使用openvas时扫描漏洞时,报告中显示的数据与数据库数据不同
    单链表实现一元多项式乘法与加法运算(C语言)
    Java学习笔记DayN Java高级特性概况
    Java学习笔记Day5 集合
  • 原文地址:https://www.cnblogs.com/crazycode2/p/10519813.html
Copyright © 2011-2022 走看看