Javascript数组Concat无法正常工作。 为什么?

所以我创build了这个jqueryui小部件。 它创build一个div,我可以将错误stream入。 小部件代码如下所示:

$.widget('ui.miniErrorLog', { logStart: "<ul>", // these next 4 elements are actually a bunch more complicated. logEnd: "</ul>", errStart: "<li>", errEnd: "</li>", content: "", refs: [], _create: function() { $(this.element).addClass( "ui-state-error" ).hide(); }, clear: function() { this.content = ""; for ( var i in this.refs ) $( this.refs[i] ).removeClass( "ui-state-error" ); this.refs = []; $(this.element).empty().hide(); }, addError: function( msg, ref ) { this.content += this.errStart + msg + this.errEnd; if ( ref ) { if ( ref instanceof Array ) this.refs.concat( ref ); else this.refs.push( ref ); for ( var i in this.refs ) $( this.refs[i] ).addClass( "ui-state-error" ); } $(this.element).html( this.logStart + this.content + this.logEnd ).show(); }, hasError: function() { if ( this.refs.length ) return true; return false; }, }); 

我可以添加错误消息,并引用页面元素将进入错误状态。 我用它来validation对话框。 在“addError”方法中,我可以传入一个id或一个id数组,如下所示:

 $( "#registerDialogError" ).miniErrorLog( 'addError', "Your passwords don't match.", [ "#registerDialogPassword1", "#registerDialogPassword2" ] ); 

但是,当我传入一个ID数组它不起作用。 问题是在以下几行(我认为):

 if ( ref instanceof Array ) this.refs.concat( ref ); else this.refs.push( ref ); 

为什么没有这种concat工作。 this.refs和ref都是数组。 那么为什么concat不工作?

奖金:我在这个小部件中做什么愚蠢的? 这是我的第一个

concat方法不会更改原始数组,您需要重新分配它。

 if ( ref instanceof Array ) this.refs = this.refs.concat( ref ); else this.refs.push( ref ); 

这是为什么:

定义和用法

concat()方法用于连接两个或多个数组。

此方法不会更改现有数组,但会返回一个新数组,其中包含已连接数组的值。

您需要将连接的结果返回到您所拥有的数组中。