console.log打印函数定义,以及函数预期输出

时间:2015-07-15 07:50:59

标签: javascript node.js console.log prototype-programming

我写了以下代码:

Array.prototype.toMyString = function() {
    var _new_line_str = '';
    for(var j in this) {
        (this.length-1) != j 
            ? _new_line_str += this[j]+';' 
            : _new_line_str += this[j];
    }
    return _new_line_str;
};

使用以下代码调用上述方法:

_new_line_str = line_arr.toMyString();
console.log(_new_line_str);

但是使用上面写的 console.log(_new_line_str); 打印结果后跟 toMyString()函数的函数定义,而不是唯一的结果。< / p>

Output:
this;is;a;result;of;above;code;;;;23function() {
    var _new_line_str = '';
    for(var j in this) {
        (this.length-1) != j 
            ? _new_line_str += this[j]+';' 
            : _new_line_str += this[j];
    }
    return _new_line_str;
};

1 个答案:

答案 0 :(得分:3)

不要使用for in来迭代数组的元素,而是列出对象属性,包括继承的属性(其中包括你添加的函数)。

更改

for(var j in this) {

for(var j=0; j<this.length; j++) {

来自MDN,Array iteration and for...in

  

数组索引只是具有整数名称的可枚举属性   否则与一般对象属性相同。没有   保证for ... in将返回任何特定的索引   order和它将返回所有可枚举的属性,包括那些   使用非整数名称和继承的名称

另请注意,将意外函数添加到您不拥有的对象(特别是原生对象)并将此函数看作无用之后,这被认为是不好的做法:您可以使用{{3}获得相同的结果与line_arr.join(";")