Javascript 使用新方法原型化数组类的最佳方法是什么
我有很多函数方法需要使用它,我需要发布一个带有这些方法的库,以便与JavaScript开发人员共享它。这非常有帮助,因此,例如,我需要添加一个名为Javascript 使用新方法原型化数组类的最佳方法是什么,javascript,javascript-framework,Javascript,Javascript Framework,我有很多函数方法需要使用它,我需要发布一个带有这些方法的库,以便与JavaScript开发人员共享它。这非常有帮助,因此,例如,我需要添加一个名为duplicates的方法,将返回数组的副本 正如你所看到的,ECMA并没有正式发布这个方法,所以我不知道最好的脚本格式 1- 像这样使用它 [1,2,2].duplicates(); Ary([1,2,2]).duplicates(); 二,- 我需要知道的是,如果不是用ECMA正式发布的,而是从Array类继承并使用它,那么直接使用protot
duplicates的方法,
将返回数组的副本
正如你所看到的,ECMA并没有正式发布这个方法,所以我不知道最好的脚本格式
1-
像这样使用它
[1,2,2].duplicates();
Ary([1,2,2]).duplicates();
二,-
我需要知道的是,如果不是用ECMA正式发布的,而是从Array类继承并使用它,那么直接使用prototype到Array JavaScript类来添加功能更像是这样吗
或者它可以吗
后果如何
对于您自己的代码,可以向
数组中添加duplicates
方法。prototype
但是如果您使用的代码(您自己的或您正在使用的东西)错误地使用了。在中循环通过如下数组,您确实需要做好准备:
for (var i in myArray) { // <==== Wrong without safeguards
}
Object.defineProperty(Array.prototype, "duplicates", {
value: function() {
// ...the code for 'duplicates' here
}
});
以这种方式定义的属性不可枚举,因此不会显示在
循环中的
for..中,因此无法正确处理数组中for..的代码不会受到影响
不幸的是,在JavaScript中,目前不可能正确地从
Array.prototype
(您的第二个选项)派生,因为Array
对名称都是数字的属性(称为“数组索引”)进行特殊处理,并有一个特殊的length
属性。当前在派生对象中都无法正确提供这两个选项。有关这些特殊属性的更多信息,请参阅我的博客文章。作为一般规则:不要对本机Javascript对象原型进行修补。它可能看起来无害,但如果您在站点/应用程序中包含第三方代码,它可能会导致各种微妙的错误
修改数组
原型尤其有害,因为互联网上到处都是错误的代码,这些错误的代码使用对数组进行迭代。。。在
构造中
请查看:
for(var i in [1,2,3]) {
console.log(i);
}
产出:
1
2
3
但是如果您已经修改了数组
原型,如下所示:
Array.prototype.duplicates = function() { }
它输出
1
2
3
duplicates
.Related:and@Matt:
Array
不是DOM的一部分。
Array.prototype.duplicates = function() { }
1
2
3
duplicates