【问题标题】:Inheritance of FUNCTIONS is becoming a nightmareFUNCTIONS 的继承正在成为一场噩梦
【发布时间】:2017-12-26 11:02:00
【问题描述】:

我之前是通过继承的概念,现在的情况是让我们有和空的构造函数

function Constructor(/* i am an empty function  */ );

现在我们要为 Object.prototype 添加一个属性,并创建一个构造函数的实例

Object.prototype.game = "hello i am a game";
 let a =  new Constructor();
 a.game();

现在我们知道输出将是 "hello i am a game"。因此 var a 继承自 Object 因此 Constructor 函数继承自 Object 因此

Constructor.__proto__ === Object.prototype

必须是true,而不是为什么会出现false

【问题讨论】:

  • __proto__prototype 都是对象。所以你不能在他们身上使用===
  • 您的示例代码不起作用(Uncaught SyntaxError: Unexpected token ;Uncaught TypeError: a.game is not a function),那么您到底在问什么?
  • “继承自”与“直接继承自”不同。因此,不要测试Object.getPrototypeOf(a) == b(顺便说一句,不要使用已弃用的__proto__!),您需要执行遍历整个链的b.isPrototypeOf(a)

标签: javascript node.js oop inheritance prototype


【解决方案1】:

构造函数。proto === Object.prototype

不,这不应该是真的。应该是这样的:

a.__proto__ === Constructor.prototype

但是(在这种情况下)

Constructor.prototype.__proto__ === Object.prototype

应该是真的。


第一个直接来自原型定义。 从构造函数创建的对象的__proto__ 属性等于该函数的prototype

第二个来自Constructor.prototype 也是一个对象 - 并且是使用Object 构造函数创建的(因此类似于第一种情况,它的__proto__ 必须等于构造函数的prototype,即@ 987654330@)。

附言。但是要直接回答Constructor.__proto__ 等于什么的问题,那就是Function.prototype(推理可能是:这是因为Function 对象是创建Constructor 函数的对象)。

【讨论】:

  • 是的,但你能解释一下为什么这会是真的
  • 非常感谢@GiorgiMoniava 现在我知道我哪里出错了
  • @HARSHBAJPAI 如果是这种情况,您可以将答案标记为已接受;) 进一步阅读:stackoverflow.com/questions/650764/…
  • 我会接受您的回答,但需要 4 分钟,因为您无法在 4 分钟之前接受回答
猜你喜欢
  • 2012-06-26
  • 2022-06-29
  • 2023-03-14
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2018-03-14
相关资源
最近更新 更多