我已经制作了很多 jQuery 特殊事件,现在我正在尝试将它们制作为 jQuery 插件。
我的代码是:
$.each("down move hold up tap swipeUp swipeDown swipeLeft swipeRight drag dragCell".split(" "), function(key, value) {
$.fn[value] = function() {
var args = [value].concat(Array.prototype.splice.call(arguments,0));
if ( $.isFunction(arguments[0]) || $.isFunction(arguments[1]) ) {
return this.bind.apply(this, args);
} else {
return this.trigger.apply(this, args);
}
};
});
我循环名称数组(向下、移动、按住、向上等)并动态创建 jQuery 插件。
正如您所看到的,获取该值并以其后命名插件:$.fn.down
、$.fn.move
等。
然后我获取参数并通过 native 数组方法循环它。
Array.prototype.splice.call(arguments, 0);
这将返回一个 native 数组[arguments[0],arguments[1],...]
并将其与值
连接起来,最终得到:
["down", arguments[0], arguments[1], ...],
["move", arguments[0], arguments[1], ...],
....
这样做是否有任何风险(使用 native 方法和其他对象),是否有丢失数据的可能性?
如您所见,它与 jQuery 的 bind
和 trigger
方法混淆。这也危险吗?
最佳答案
好吧,我结束这个问题:实现相同参数的方法是:
感谢raynos
var toArray = function (obj) {
var ret = new Array(obj.length);
for (var i = 0, len = obj.length; i < len; i++) {
ret[i] = obj[i];
}
return ret;
}
toArray(arguments);
关于javascript - 在其他对象上使用 native 数组原型(prototype)方法有风险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648575/