對象時,如果我有這樣的功能需要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-返回,這一點) –