首页技术文章正文

ES6借用构造函数继承父类属性

更新时间:2021-12-15 来源:黑马程序员 浏览量:

IT培训班

在ES6之前,JavaScript中并没有extends继承,如果要实现继承的效果,可以通过构造函数和原型对象来模拟实现。本节将会讲解如何利用构造函数和原型对象实现继承。

在ES6中,继承是通过定义两个类,然后子类用extends关键字继承父类。而在ES 6之前,只能用构造函数来代替类,在子类中利用call0方法将父类的this指向子类的this,这样就可以实现子类继承父类的属性。为了使读者更好地理解,下面我们通过代码进行演示。

如果没有,再到Son原型对象中查找,如果仍然没有,再到Father原型对象中查找,一沿着原型链找到最后。由于Father原型对象中有一个money()方法,所以通过Son实例对象就继承了money()方法。

不能直接将父类原型对象赋值给子类原型对象,这样会导致子类无法拥有自己的方法,在子类中添加的方法同时也会添加到父类中。下面我们通过代码演示这样一种错误的用法。

function Father() {}
Father.prototype.money = function() {
    console.log(100000),
};
function Son() {}
Son.prototype = Father.prototype;   //通过这种方式无法实现真正的继承
Son.prototype.exam = function() {}; //为子类增加方法的时候,会影响父类
console.log(Father.prototype.exam);    //可以看到父类也有了exam方法
真正的继承是子类可以拥有自己的方法,并且当子类和父类的方法名相同时,子类方法可以覆盖父类方法。


多学一招:class语法的本质

ES 6提供了class语法用来定义类,但即使没有class语法,在JavaScript中可以用构造函数和原型对象的语法来替代。那么,class语法定义的类和构造函数有没有区别呢?下面我们通过代码进行测试。

class Person {}
console.log(Person.prototype);        //类也有原型对象
Person.prototype.money = function() { //类也可以增加方法
    console.log(100000);
};
new Person().money(); //输出结果:100000






猜你喜欢:

ES6 的 class 和构造函数的区别

什么是ES6模块化规范?怎样导入导出模块?

ES6 symbol数据类型

黑马程序员HTML&JS前端开发培训

分享到:
在线咨询 我要报名
和我们在线交谈!