sla*_*ppy 6 javascript arrays function new-operator
我正在尝试使用该new关键字,但我无法找到此行为的解释.假设我们有一个函数返回一个整数:
(在萤火虫中)
>>> function x() { return 2; }
>>> x()
2
>>> new x()
x { }
Run Code Online (Sandbox Code Playgroud)
但是如果函数返回一个数组:
>>> function y() { return [2]; }
>>> y()
[2]
>>> new y()
[2]
Run Code Online (Sandbox Code Playgroud)
这是为什么 ?
T.J*_*der 16
该new运营商有一个有趣的现象:除非构造函数返回一个不同的对象,它返回由运营商创建的对象.忽略构造函数的任何非对象返回值,这就是为什么当你返回时你2看不到这一点.
这是当你说new x():
x.prototype.x使用thisset 调用新对象.x不返回任何内容,new表达式的结果是在步骤1中创建的新对象.但是,如果x返回非null 对象引用,则该对象引用是new表达式的结果而不是创建的对象在步骤1中,忽略任何其他类型的返回值(null原始数字,原始字符串undefined等); 它必须是非null对象引用才能优先于new创建的对象.new操作员对对象引用的这种特殊处理允许您将不同的对象替换为new创建的对象.这在某些有限的情况下可以很方便,但绝大多数情况下,设计用于new(称为构造函数)的函数不应返回任何内容.
对于某些轻读(hah!),这由规范(HTML ; PDF)的第13.2.2节("[[Construct]]")涵盖,该节由第11.2.2节(" 运算符")引用.new
因为数组是一个对象但2不是.
如果使用new关键字调用函数,则必须返回一个对象.如果你没有明确地这样做,它会自动返回this(这是一个继承自的对象funcName.prototype).
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |