原型对象的继承
js中对象间存在原型链的关系,所以就有对应存在的原型继承的方法,这里记录一下其中一种。
call函数的使用
function People(name, age) {
this.name = name;
this.age = age;
this.energy = 100;
}
function Teacher(name, age, subject) {
People.call(this, name, age);
this.subject = subject;
}
call函数调用People的属性,相当于搬入了this所在的命名空间中,等同于
function Teacher(name, age, subject) {
this.name = name;
this.age = age;
this.energy = 100;
this.subject = subject;
}
因此,父对像中的不用传入参数的属性就不需要在call中写入
创建一个父子关系?
由上述代码产生的Teacher只是继承了People的属性,而在原型链中并没有与之对应的关系,所以接下来就需要解决这个问题
Teacher.prototype = Object.create(People.prototype);
使用Object.create方法,我们为Teacher创建了与People相一致的原型,在console中输入Teacher.prototype
进行检验,发现Teacher的创建器也边为People,再对此进行修正
Object.defineProperty(Teacher.prototype, 'constructor', {
value: Teacher,
enumerable: false, // so that it does not appear in 'for in' loop
writable: true });
再次进行检验,就ok了