js原型继承-笔记

原型对象的继承

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了

学习文档

上一篇:SQL行列转换


下一篇:08 Shrio 授权的三种方式