为什么
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。 .
因此,事件的顺序是:
例子
定义new Example()
被求值- 结果作为参数传递给匿名函数调用
- 该函数的返回值(
undefined
)被分配给Example.prototype.go
... 除了在第 2 步出错,因为 go
在那一点上没有定义。
为了避免这种情况,每条语句都以明确的分号结束。
关于在括号中调用构造函数时未定义 Javascript 原型(prototype)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53335257/