簡體   English   中英

Javascript函數(構造函數)返回類型中的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM