继承的实现方式之 假借构造函数
基本形式
function Person(name){ this.name = name; } Person.prototype.sayHi = function(){ console.log(this.name); } function Student(name, mark){ Person.call(this, name); this.mark = mark; } let student1 = new Student("Jack", 97); console.log(student1.name, student1.mark); //Jack 97 student1.sayHi(); //Uncaught TypeError: student1.sayHi is not a function
在子类的构造函数中调用父类的构造函数,并通过call或者aplly使this始终指向创建的子类实例。
优点:
- 通过借用构造函数,将父类的实例属性直接定义到了子类上,每个子类实例之间不共享
- 可以向父类的构造函数传参
缺点:
- 无法继承父类的原型上的属性和方法
- 由于1,所有需要继承的方法都必须定义在构造函数中,不能实现函数的复用
- 没有形成原型链,创建的实例只是子类的实例不是父类的实例。在子类实例和父类原型之间使用instanceof或isPropertypeOf会返回false。

浙公网安备 33010602011771号