javascript - 调用基本构造函数 - Javascript

标签 javascript inheritance prototype

有两种方法可以在子进程中调用父构造函数。

var A = function A() {
  this.x = 123;
};

var B = function B() {

  // 1. call directly
  A.call(this);

  // 2. call from prototype
  A.prototype.constructor.call(this);
};

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

有没有一种情况比另一种更安全/更好,或者它们总是等价的?

最佳答案

直接使用基础构造函数总是更好,原因如下:

  1. 速度更快。解释器不需要访问 prototype.constructor
  2. 它更安全。考虑下面的程序。

A继承自C,但我忘记将A.prototype.constructor设置回A。所以它现在指向 C。如果我们使用第二种方法,这会导致构造函数 B 出现问题:

var C = function C() {
    // some code
};

var A = function A() {
  this.x = 123;
};

A.prototype = Object.create(C.prototype);
// I forgot to uncomment the next line:
// A.prototype.constructor = A;

var B = function B() {

  // 1. call directly
  A.call(this);

  // 2. call from prototype
  A.prototype.constructor.call(this); // A.prototype.constructor is C, not A
};

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

关于javascript - 调用基本构造函数 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272038/

相关文章:

javascript - 无法创建由继承自多个类的类组成的 AngularJS 服务

c# - 搞乱泛型和图形建模

javascript - 为什么将字符串 'prototype' 分配给一个变量然后用它来设置对象的原型(prototype)?

javascript - 原型(prototype) - TypeError : A. TravelTo 不是函数

javascript - 在React功能组件中,在鼠标悬停时加载react-bootstrap的下拉数据,而不是在鼠标单击时加载?

javascript - 如何捕获 JavaScript 中的动态导入错误?

javascript - APEX:如何实现循环级联选择列表(多对多)

javascript - 模态背景淡入淡出问题与 Bootstrap 模态

objective-c - NSManagedObject 基类的选择器无法识别

javascript - 从异步调用访问另一个对象原型(prototype)上的对象