教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

JavaScript中怎样借用构造函数继承父类属性?

更新时间:2021年12月15日11时10分 来源:传智教育 浏览次数:

好口碑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模块化是什么?怎样导入和执行模块中的代码?

常见的js中的继承方法有哪些?

什么是继承?Java中如何声明一个类继承另一个类?

哪些css属性可以继承?哪些不可以继承?

传智教育前端与移动开发培训

0 分享到:
和我们在线交谈!