Javascript 如何在不使用prototype的情况下获得Object/Array.prototype的功能?
好的,我已经用一个愚蠢的举动阻止了我自己,这导致了与我正在使用的jQuery库的冲突,我应该说,在我阅读完之后,可能会破坏更多。无论如何,我尝试使用以下位:Javascript 如何在不使用prototype的情况下获得Object/Array.prototype的功能?,javascript,jquery,arrays,prototype,Javascript,Jquery,Arrays,Prototype,好的,我已经用一个愚蠢的举动阻止了我自己,这导致了与我正在使用的jQuery库的冲突,我应该说,在我阅读完之后,可能会破坏更多。无论如何,我尝试使用以下位: Array.prototype.contains = function(v) { for(var i = 0; i < this.length; i++) { if(this[i] === v) return true; } return false; }; Array.prototype.u
Array.prototype.contains = function(v) {
for(var i = 0; i < this.length; i++) {
if(this[i] === v) return true;
}
return false;
};
Array.prototype.unique = function() {
var arr = [];
for(var i = 0; i < this.length; i++) {
if(!arr.contains(this[i])) {
arr.push(this[i]);
}
}
return arr;
}
Array.prototype.contains=函数(v){
for(var i=0;i
然而,为了获得数组的唯一值,这最终导致jQuery在我的原因中发生冲突,破坏了很多东西,那么我如何避免使用prototype这一被禁止但又美味的想法呢?特别是在需要修改数组中唯一值的情况下?避免修改本机类型原型的常见方法是静态方法:
Array.unique = function( entity ) {
// do your stuff
};
// example call
var unique = Array.unique( [1, 1, 2, 3] );
或者,更进一步,甚至做这样的事情
var Arrays = Arrays || {};
Arrays.unique = function( entity ) { /* … */ };
这样一来,您就完全脱离了内置的
数组
您可以使用下划线这样的库吗?这是一种更简单的方法-为什么不将原型方法的名称更改为“hascontent”或“isunique”之类的名称?以何种方式冲突?你有错误吗?你有例子吗?jQuery不会修改任何内置原型。因此,此代码不应与之冲突。具体来说,您所观察到的问题是什么?如果您在数组上使用for in
,则可能会出现问题。但这与jQuery无关。这与不知道如何正确迭代数组有关。内置构造函数上的“静态”方法也可能与其他代码冲突。@CookieMonester我添加了一个轻微的变化(无论如何我更喜欢)。确保安全的唯一真正方法是在包含其余代码的函数中声明它。如果是全球性的,你可能会有同样的问题。虽然我不知道OP首先谈论的是什么冲突……最终,唯一真正的解决方案是准确地了解加载的每一位代码是如何影响环境的,如果它以不希望的方式影响环境,则不要加载它。如果您的库之一已经定义了数组
,您应该知道它。如果没有,就不应该有任何干扰。最终,您可以反驳这一论点——在某些时候,您需要一些全局可用的名称,即使您将整个应用程序封装到一个模块中……理论上,这可能会产生干扰。因此,我看到了使用内置程序做任何事情的危险,但是使用数组确实应该足够安全。