继承 能继承什么东西:构造函数、以及原型中的所有东西 原型继承实现方式就是:1、定义新的构造函数,并在内部用call()调用希望“继承”的构造函数,并绑定this;(仅需继承构造函
继承
能继承什么东西:
构造函数、以及原型中的所有东西
原型继承实现方式就是:
1、定义新的构造函数,并在内部用call()调用希望“继承”的构造函数,并绑定this;(仅需继承构造函数时需要)
2、借助中间函数F实现原型链继承,最好通过封装的inherits函数完成;
3、继续在新的构造函数的原型上定义新方法。
有原型对象时继承
Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming
// 原型对象:
var Student = {
name: ‘Robot‘,
height: 1.2,
run: function () {
console.log(this.name + ‘ is running...‘);
}
};
function createStudent(name) {
// 基于Student原型创建一个新对象:
var s = Object.create(Student);
// 初始化新对象:
s.name = name;
return s;
}
var xiaoming = createStudent(‘小明‘);
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true
仅有构造函数时继承
修改原型链上的继承关系
function inherits(Child, Parent) {
var F = function () {};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
}
function Student(props) {
this.name = props.name || ‘Unnamed‘;
}
Student.prototype.hello = function () {
alert(‘Hello, ‘ + this.name + ‘!‘);
}
function PrimaryStudent(props) {
Student.call(this, props);
this.grade = props.grade || 1;
}
// 实现原型继承链:
inherits(PrimaryStudent, Student);
// 绑定其他方法到PrimaryStudent原型:
PrimaryStudent.prototype.getGrade = function () {
return this.grade;
};
class继承
一个class:
class Student {
constructor(name) {
this.name = name;
}
hello() {
alert(‘Hello, ‘ + this.name + ‘!‘);
}
}
class继承:
class PrimaryStudent extends Student {
constructor(name, grade) {
super(name); // 记得用super调用父类的构造方法!
this.grade = grade;
}
myGrade() {
alert(‘I am at grade ‘ + this.grade);
}
}
