Mar*_*era 14 javascript specifications
如果我有这样的功能:
function Apple(){
this.color = "green";
return this;
}
Run Code Online (Sandbox Code Playgroud)
在创建这样的对象时:
var my_obj = new Apple();
Run Code Online (Sandbox Code Playgroud)
该行是return this;必要的和/或是否通过语言参考有效?
Arn*_*anc 17
不,this没有必要返回,但它是有效的.如果返回的值是对象,new则将返回该对象而不是新创建的对象.
见ECMAScript 5的第 11.2.2和13.2.2点:
new运算符在构造函数(通常是函数)上调用内部[[Construct]]方法:
11.2.2新运营商
生产NewExpression:new NewExpression的计算方法如下:
- 设ref是评估NewExpression的结果.
- 让构造函数为GetValue(ref).
- 如果Type(构造函数)不是Object,则抛出TypeError异常.
- 如果构造函数没有实现[[Construct]]内部方法,则抛出TypeError异常.
- 返回在构造函数上调用[[Construct]]内部方法的结果,不提供任何参数(即,一个空的参数列表).
函数的[[Construct]]内部方法在第13.2.2节中描述:
13.2.2 [[构造]]
当使用可能为空的参数列表调用Function对象F的[[Construct]]内部方法时,将执行以下步骤:
- 让obj成为新创建的本机ECMAScript对象.
- 按照8.12中的规定设置obj的所有内部方法.
- 将obj的[[Class]]内部属性设置为"Object".
- 将obj的[[Extensible]]内部属性设置为true.
- 让proto成为使用参数"prototype"调用F的[[Get]]内部属性的值.
- 如果Type(proto)是Object,则将obj的[[Prototype]]内部属性设置为proto.
- 如果Type(proto)不是Object,则将obj的[[Prototype]]内部属性设置为标准内置Object原型对象,如15.2.4中所述.
- 设result是调用F的[[Call]]内部属性的结果,将obj作为this值提供,并将传递给[[Construct]]的参数列表作为args.
- 如果Type(result)是Object,则返回结果.
- 返回obj.
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |