一個函數可以返回null
,但是有什麼辦法可以讓函數的new
實例返回null?在javascript中,NEW函數是否可以返回NULL?
例如,在這種無聊的代碼(嚴格用於說明目的)
var f = function(j) { if(j > 5) return null; this.j = j; }; for(var f1=f(1); f1; f1=f(fi.j)) { ... }
什麼代碼沒有做的是有new f()
返回NULL - 它似乎時只是簡單地扔掉new
返回值。這裏new f()
除了__proto__
之外根本沒有膽量,但拒絕廢止本身。
是尋找無返回物的「對象」的合理選擇嗎?如果是這樣,事先不知道「對象」應該是什麼樣子,那麼測試這個的最好方法是什麼?
解決方案:
考慮到JavaScript的new
不能失敗 - 它必須返回一個對象,不能返回空值(參見下面的答案!),恕我直言,正確的方式來完成的例子:
var F = function(i) { if(i > 5) throw('tooMuch'); this.i = i; } try { for(var f = new F(1); true; f = new F(f.i)) { ... } } catch(er) { null; }
這使用throw/catch
循環控制 - 不是我的一杯茶,但在iterators
新的JavaScript規格使用這種相同的機制,所以我可能需要思考自己「thow異常」,而不是「t如何錯誤「。
你是什麼意思的膽量?另外,如果您在創建對象時可以返回null,那麼它就沒有任何意義,因爲您沒有看到它自身在任何地方返回。 –
@ilia:膽量,即屬性 - 例如this.jy.不明白你的第二個評論。 –