iT邦幫忙

0

Javascript function return疑問

本來依照我的寫法是這樣的

function Encryption(keyword){	//倒序字串
            var Result='';
            for(var i=keyword.length;i>=0;i--){
                Result+=keyword.charAt(i);
            }
            return Result;
        }

但是webStorm卻是出現警告
primitive value returned from constructor will be lost when called with 'new'

在網路上爬了文

之後我改寫成了

 function Encryption(keyword){	//倒序字串
            this.Result='';
            for(var i=keyword.length;i>=0;i--){
                this.Result+=keyword.charAt(i);
            }
        }

警告訊息就沒了

但是我不明白為什麼我第一個寫法會出現訊息?

return不是這樣用的嗎?

fillano iT邦超人 1 級 ‧ 2015-08-23 17:10:01 檢舉
如果呼叫Encryption()時沒有加上new,那你的寫法並沒有錯,不需要在意WebStorm的警告。

如果要兩個都能用,不妨:

function Encryption(keyword){	//倒序字串
    var t = {result: ''};
    for(var i=keyword.length;i>=0;i--){
        t.result += keyword.charAt(i);
    }
    return t;
}

這樣有沒有加上new,結果都一樣。不過需要從返回物件的result property取得結果。

2 個回答

2
wiseguy
iT邦超人 1 級 ‧ 2015-08-22 11:11:01
最佳解答

如果你是寫

<pre class="c" name="code">var v = Encryption(keyword);

那麼第一種寫法沒錯,Encryption 只是個 function。
如果你是寫

<pre class="c" name="code">var v = new Encryption(keyword);

那麼要寫成第二種,因為 Encryption 是物件建構子。
依訊息,你是用 new 在呼叫一般 function 吧?多此一舉地加了 new 這個關鍵字。

rockon852 iT邦新手 5 級 ‧ 2015-08-23 06:56:22 檢舉

var En = Encryption('abc');

這樣子的寫法是多增加了new嗎?

0
rustic
iT邦見習生 ‧ 2017-03-12 16:54:18

webstorm 认为
首字母大写的是要定义为 class 类型
普通的 function 建议首字母小写

你改成小写,警告就没了

我要發表回答

立即登入回答