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();

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(); 

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(); 

4、对象冒充

    function Person(name, age) {
      this.name = name;
      this.age = age;
      this.show = function () {
        alert(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(); 

Person的show是非静态方法,show里调用的name、age属性都没有初始值,所以用原型链方式更好。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值