对象时,如果我有这样的功能需要RETURN:是从构造函数创建新
function Apple(){
this.color = "green";
return this;
}
当这样创建对象:
var my_obj = new Apple();
是该行return this;
必要的和/或它通过语言参考有效吗?
对象时,如果我有这样的功能需要RETURN:是从构造函数创建新
function Apple(){
this.color = "green";
return this;
}
当这样创建对象:
var my_obj = new Apple();
是该行return this;
必要的和/或它通过语言参考有效吗?
不,返回this
没有必要,但它是有效的。如果返回的值是对象,则new
将返回该对象而不是新创建的对象。
见点11.2.2和13.2.2 ECMAScript 5:
新操作员调用内部[[构建]]方法在构造(通常是功能):
11.2.2新的运营商
生产NewExpression:如下新NewExpression评价:
- 让裁判是评估NewExpression的结果。
- 让构造函数成为GetValue(ref)。
- 如果Type(构造函数)不是Object,则抛出TypeError异常。
- 如果构造函数没有实现[[Construct]]内部方法,则引发TypeError异常。
- 返回在构造函数中调用[[Construct]]内部方法的结果,不提供参数(即参数的空列表)。
的〔〔构建体]的函数内部方法在点13.2.2描述:
13.2.2 [[构建体]]
当[[构建]]函数对象的内部方法用一个可能为空的参数列表调用F,采取以下步骤:采取以下步骤:
- 让obj b e新创建的本地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]]内部属性设置为如15.2.4所述的标准内置对象原型 对象。
- 让结果成为调用F的[[Call]]内部属性的结果,提供obj作为此值并将传递给[[Construct]]的参数列表作为参数提供。
- 如果Type(result)是Object,则返回结果。
- 返回目标。
这是没有必要的。
当用new
运算符实例化时,该函数将隐式返回一个新的Object
。 this
将在该上下文中引用该新对象。
无效返回(例如原语或非新对象)仍将返回标准this
。
您可以通过返回一个新的不同对象来覆盖它。
var a = function() {
return new Number(42);
},
b = new a; // typeof b === 'number'.
这是没有必要的,一个构造函数自动返回新创建的对象。
关于明确地返回从构造函数的值这个页面已经好信息:JavaScript: Constructor Return Value
报价:
如果一个构造函数没有返回值,空,或任何原子/非对象值,则表示值被忽略并且新创建的对象引用被返回给调用者。例如,来自构造函数的返回值0(零)将被忽略。
和
...第二片神奇躲避上面是返回一个特定的,可能存在的预对象,而不是一个新的实例的引用的能力的构造函数。如果需要,这将允许您自己管理实际实例的数量;可能是由于资源有限或者不适合的原因。
可能重复[可以构造函数返回以避免返回此值?](http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-返回,这一点) –