无法弄清楚为什么这会给我一个TypeError

时间:2015-07-30 00:56:59

标签: javascript

我编写了一个函数,其中我希望参数与空格连接:

function sayIt(str) {
    
    var stringCollection = [];
    
    this.addToCollection = function(str){
        stringCollection.push(str);
        
        if(!str){  // for the () part in the call
            return stringCollection.join(" ");
        }
    };
    
    return this.addToCollection(str);
    
}


console.log(sayIt('my')('name')('is')('Harry')()); // should log "my name is Harry"

它给了我一个TypeError。任何想法,为什么?

2 个答案:

答案 0 :(得分:4)

当你将一个单词作为参数时,你不会返回一个函数 - 试试这个;

function sayIt(str) {
    
    var stringCollection = [];
    
    function concat(str){
        stringCollection.push(str);
        
        if(!str){  // for the () part in the call
            return stringCollection.join(" ");
        }
        return concat;
    };
    return concat(str);        
}


alert(sayIt('my')('name')('is')('Harry')()); // should log "my name is Harry"

答案 1 :(得分:2)

我不太喜欢你的方法的设计,因为它对我来说似乎很脆弱,但我相信你背后有理由。

修改

this.addToCollection = function(str){
    stringCollection.push(str);

    if(!str){  // for the () part in the call
        return stringCollection.join(" ");
    }
};

this.addToCollection = function(str){
    stringCollection.push(str);

    if(!str){  // for the () part in the call
        return stringCollection.join(" ");
    }
    return this.addToCollection;
};