[英]Javascript strange behavior in function (constructor) return types
假設我們有兩個類似以下的功能:
function a(){ this.x = 5; return {z:20};}
function b(){ this.x = 5; return 30;}
現在,如果運行這些行,一切似乎都是合理的:
a(); //output : {z:20}
b(); //output : 30;
但是如果您將它們作為對象構造函數運行:
new a() //output : Object {z:20}
new b() //output : b {x:5}
我不知道new
構造函數是否應該始終返回對象,為什么行為不同? JavaScript是否監視返回類型? 如果返回類型是對象,則直接返回它,如果不是,則返回已啟動的實例?
我認為如果它是一個構造函數,那么它應該始終忽略返回類型,並重新初始化所發起的對象。 我認為這種行為使JavaScript過於復雜。 這里還有其他我沒有得到的東西嗎?
我不知道新的構造函數是否應該始終返回對象,為什么行為不同? JavaScript是否監視返回類型? 如果返回類型是對象,則直接返回它,如果不是,則返回已啟動的實例?
基本上是。 如果函數的返回值不是對象,則new
運算符將返回this
對象(新對象)(實際上是內部[[Construct]]
方法執行此操作)。
我認為如果它是一個構造函數,那么它應該始終忽略返回類型,並重新初始化所發起的對象。 我認為這種行為使JavaScript過於復雜。 這里還有其他我沒有得到的東西嗎?
這實際上是一種主觀意見。 好處是構造函數可以決定返回一個不同的值,這使其更靈活。 另一方面,我認為不返回值比返回值更常見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.