【发布时间】:2012-07-02 11:17:33
【问题描述】:
我目前正在通读这个jquery masking plugin 以尝试了解它的工作原理,并且在许多地方,作者调用slice() 函数,不传递任何参数。例如这里的_buffer 变量是slice()d,而_buffer.slice() 和_buffer 似乎具有相同的值。
这样做有什么理由吗,还是作者只是让代码比应该的更复杂?
//functionality fn
function unmaskedvalue($input, skipDatepickerCheck) {
var input = $input[0];
if (tests && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {
var buffer = _buffer.slice();
checkVal(input, buffer);
return $.map(buffer, function(element, index) {
return isMask(index) && element != getBufferElement(_buffer.slice(), index) ? element : null; }).join('');
}
else {
return input._valueGet();
}
}
【问题讨论】:
-
没有一个称职的程序员会让代码变得比它需要的更复杂。
-
这是必要的。在函数的开头使用
slice方法在函数修改之前备份原始数组项,这样作者即使在编辑之后和同时也可以访问原始数组的位置、键和值大批。在制作负责任的字符串操作界面时,这是必不可少的,例如您的示例插件。补充@alex 的评论,如果它在那里,那是有原因的。如果您需要更好地理解,请按 Ctrl+F 查找源并查找稍后访问它的位置。
标签: javascript jquery