在括号中调用构造函数时未定义 Javascript 原型(prototype)函数

标签 javascript

为什么

function Example() {
  this.go();
}
Example.prototype.go = function() {
    console.log("going");
  }
  (new Example());

向我咆哮说 this.go 不是一个函数而

function Example() {
  this.go();
}
Example.prototype.go = function() {
  console.log("going");
}
new Example();

是否按预期正确记录?

执行环境是node v10.4.1 on macOS High Sierra 10.13.4

最佳答案

您依赖于 ASI而且它没有按您预期的方式工作。

在第一个示例中,() 将您尝试分配给 Example.prototype.go 的函数表达式转换为 IIFE。 .

因此,事件的顺序是:

  1. 例子定义
  2. new Example() 被求值
  3. 结果作为参数传递给匿名函数调用
  4. 该函数的返回值(undefined)被分配给 Example.prototype.go

... 除了在第 2 步出错,因为 go 在那一点上没有定义。

为了避免这种情况,每条语句都以明确的分号结束。

关于在括号中调用构造函数时未定义 Javascript 原型(prototype)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53335257/

相关文章:

javascript - JavaScript 中 Math.ceil 或 Math.round 上的非小数?

javascript - 如何将二进制补码字符串解析为数字

javascript - 数据绑定(bind)不适用于 div 的条件显示

javascript - Skrollr 在 IOS 中不起作用,尽管我已经用 Skrollr Body 包裹了 body

javascript - 我想在数据库中搜索一个 child 然后将其删除,但它在这里不起作用

javascript - 没有类名 jquery 选择器

javascript - onclick 或内联脚本在扩展中不起作用

javascript - 使用axios发送表单数据

javascript - 如何在 div 中选择某些 HTML 元素

javascript - Javascript 的 MathML 生成算法。任何推荐引用