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

    .

  • 相关阅读:
    SqlServer中插入无时间的日期
    IEnumerable的扩展方法
    JQuery插件之Autocomplete
    Visual Studio2010 即时生成序列图
    SQLSERVER系统表应用之基于Table生成存储过程参数列表
    格式化代码之自动加Region
    SQLSERVER2008使用CTE转换string到Table
    SQLSERVER使用CLR Stored Procedure导出数据到Excel
    SQLSERVER中找出拙劣的约束,索引,外键
    SQLSERVER2008中CTE的Split与CLR的性能比较
  • 原文地址:https://www.cnblogs.com/crazycode2/p/10519813.html
Copyright © 2011-2022 走看看