正确实现javascript继承

javascript基于原型链实现继承,重在理解__proto__,prototype,constructor之间的关系。

先试着读一下这段代码:

这段代码实现了Child继承Parent,下面分析一下。

一般来说,类对象是通过一个构造函数创建的,类对象共享的属性/函数应该放在prototype里,非共享的则随着构造函数赋值给this(也就是当前构造的对象)。

既然Child要继承Parent,那么一方面需要继承Parent的原型里的共享属性/函数,另外一方面需要继承Parent构造函数里赋值给当前对象的属性。同时,Child的构造函数也会赋值this一些新的属性,Child也需要在自己的原型对象上定义若干的共享属性/函数。

上面的代码给出了一个合适的思路:

  • Child的构造函数中调用Parent构造函数,将this传入从而赋值得到Parent的属性。
  • Child的原型中找不到的共享属性/函数,应该继续在Parent的原型中寻找。

遵循这样的思路,最终一次对child对象的访问将是这样的过程:

在child对象中查找 -> 在child的prototype中查找(new F()) -> 在parent的prototype中查找(是由于F的prototype==parent.prototype)。

听说ES5的object.create方法就是类似实现。

js大法好。

发表评论

电子邮件地址不会被公开。