Bai*_*Dev 5 javascript constructor
我正在尝试理解关于构造函数的JavaScript(或至少V8)行为.
我知道,JavaScript构造函数应该永远不会返回任何东西(所以:) undefined.
但请考虑这个JavaScript:
function Thing() {
return '';
}
var t = new Thing();
console.log(t, typeof t); // => Thing {} "object"
Run Code Online (Sandbox Code Playgroud)
现在,如果你这样做:
function Thing() {
return { hi: '' };
}
var t = new Thing();
console.log(t, typeof t); // => Object {hi: ""} "object"
Run Code Online (Sandbox Code Playgroud)
乃至:
function Thing() {
this.a = 'a';
return { hi: '' };
}
var t = new Thing();
console.log(t, typeof t); // => Object {hi: ""} "object"
Run Code Online (Sandbox Code Playgroud)
那么,如果你编写这种代码,为什么JavaScript中的构造函数会返回一个对象,而不是一个原语?
在这个SO答案中也提到了这种行为,但没有解释.我还滚动了ECMAScript规范的新操作员部分,其Construct剪断,但这并不具有启发性.
任何提示或知识(请用简单的英文)?
这是因为,根据定义,构造函数的目的是生成对象,而不是基元:
创建和初始化对象的函数对象
因此,[[Construct]]内部方法(通过new操作符调用)检查[[Call]]返回值的类型:
- 令result为调用F的 [[Call]] 内部属性、提供obj作为this值并提供传递到 [[Construct]] 的参数列表作为args的结果。
- 如果Type ( result ) 是 Object,则返回result。
- 返回obj。
事实上,这是一个不变量:
[[构造]] ( )
- 返回值的类型必须是Object。
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |