Javascript:什么是多级原型(prototype)层次结构以及为什么我们应该避免它

标签 javascript coding-style prototype-programming

Google Javascript Coding Guidelines ,它说我们不应该使用多级原型(prototype)层次结构,因为“这些层次结构比它们第一次出现时要难得多!”。其实我没看懂什么意思。在哪里可以找到一个很好的例子来解释它的用法并说明它的坏影响?

最佳答案

这是一个两级继承的例子:

// 1. level constructor
var Dog = function ( name ) {
    this.name = name;
};

Dog.prototype.bark = function () { /* ... */ };

// 2. level constructor
var TrainedDog = function ( name, level ) {
    Dog.apply( this, arguments ); // calling the super constructor
    this.level = level;
};

// set up two-level inheritance
TrainedDog.prototype = Object.create( Dog.prototype );
TrainedDog.prototype.constructor = TrainedDog;

TrainedDog.prototype.rollOver = function () { /* ... */ };

// instances
var dog1 = new Dog( 'Rex' );
var dog2 = new TrainedDog( 'Rock', 3 );

这里,dog1Dog 原型(prototype)继承了 bark 方法,dog2 继承了该方法(来自 Dog 原型(prototype))和来自 TrainedDog 原型(prototype)的 rollOver 方法。

关于Javascript:什么是多级原型(prototype)层次结构以及为什么我们应该避免它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859550/

相关文章:

javascript - 使用 typescript 的 IResourceClass 扩展 angularjs 的 $resource

shell - 命令行工具的使用语句中打印的参数顺序是否有标准?

javascript - 你如何在 JavaScript 中进行继承而不在子类的所有实例之间共享父类(super class)的同一个实例?

eclipse - 如何扩展CDT的编码风格组件?

coding-style - 链接 "and"语句时最好使用 "in"或 "let"吗?

javascript - 在 javascript 中复制 python 的 __call__?

javascript - 我无法理解有关 Javascript 继承的一些内容

javascript - Angular 2动态表单如何根据另一个字段的值显示/隐藏一个字段

javascript - 使用 javascript sort() 对表进行排序

javascript - 在 JS 中平铺图像的最简单方法