Chr*_*phe 5 javascript arrays object
我创建了一个JavaScript应用程序,它有很多数组操作(排序,过滤等).
目前我的功能是这样的:
function (myArray, arg1, arg2,...)
Run Code Online (Sandbox Code Playgroud)
其中myArray是我正在处理的数组,而arg1,arg2,...是函数用来修改数组的参数.
我认为在对象和参数之间进行明确的分离会更简洁(la jQuery):
myArray.function(arg1, arg2,...)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用Array.prototype将我的函数添加到所有数组,但是这看起来太重了,因为我添加的函数非常特定于我的情况,并且通常对数组没有意义.我也知道我可以创建一个对象,但是我不会受益于JavaScript中可用的数组方法(indexOf,filter等).
有没有办法可以创建自己的数组对象,继承默认数组方法并允许我添加自己的数组对象?
你有两个选择:
选项一是通过向其Array
添加新方法来扩展对象:
Array.prototype.myMethod = function(arg1, arg2)
{
// Use 'this' to access the array.
}
Run Code Online (Sandbox Code Playgroud)
优点是每个javascript数组现在都有这个额外的方法.当多个(外部)javascript库尝试添加相同的方法时,这也是一个缺点.此外,这种新方法将出现在for(var item in myArray)
可能有问题的结构中.
选项二是为扩展数组创建"工厂方法":
function MyExtendedArray = function()
{
var array = [];
array.myMethod = function(arg1, arg2) {
// Use 'this' or 'array' to access the array.
};
return array;
};
Run Code Online (Sandbox Code Playgroud)
现在你可以写这个来创建一个新的扩展数组:
var arr = MyExtendedArray();
Run Code Online (Sandbox Code Playgroud)
号 Array
不能被子类,并且仍然表现得像一个数组。具体来说,该length
属性不会更改以反映从数组中添加或删除的元素。
function MyArray() {}
MyArray.prototype = [];
MyArray.prototype.constructor = MyArray;
var instance = new MyArray;
instance[0] = 0;
alert(instance.length); // alerts 0
Run Code Online (Sandbox Code Playgroud)
发生这种情况的原因是因为只有通过new Array
或语法糖创建的对象[]
才能对长度进行特殊处理。
在new MyArray
上面创建一个普通对象,其原型是一个Array
,但对没有new
操作员检查是否一个对象的原型是一个Array
并设置特殊length
处理。
小智 5
您只需将函数直接添加到对象而不是原型:
var myArray = new Array();
myArray.myFunc = function(){ /* do stuff! */ };
myArray.myFunc();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1852 次 |
最近记录: |