2013-02-21 62 views
0

我已经在javascript中创建了一个词法分析器,并且我现在使用一个数组来描述一系列项目,现在我可以看到使用自己的Range对象,因此我可以正确区分“数组”和“范围数组”以这样的方式读得很好。任何方式来创建一个扩展数组的对象?

那么有什么办法可以创建一个巨大的跨浏览器兼容的Array对象的sublcass?

或者更好/更简单的方法就像使用数组一样,对于“范围数组”我只是用我自己选择的属性标记数组?

是这样的:在JavaScript

var myRange = [1,2,3]; 
myrange.isRangeObj = true; 

//i would then use if(myRange.isRangeObj) to do specific range operations. 
//However i still think myRange instanceof Range reads better 
+0

为什么你需要检查?你在'myRange'变量中不应该有非常值的值。 – Bergi 2013-02-21 11:06:27

+0

'if(typeof myRange =='object')'maybe? – Popnoodles 2013-02-21 11:06:36

+0

是的,但我没有任何自定义逻辑,我只是​​想区分一个范围数组和一个正常数组,稍后会有其他不同的数组类型。主要我想能够使用Array对象中存在的相同函数,并且能够将它区分为类型范围的对象。范围 – netbrain 2013-02-21 11:07:17

回答

1

您可以使用此:

Array.prototype.isRangeObj = false; 

因此,所有创建的阵列由你将有财产isRangeObj

+1

我需要将它添加到原型吗?将它添加到数组的单个实例是不够的吗? 'var arr = []; arr.isRangeObj = false'。这样我就不会混淆数组的全局范围。 – netbrain 2013-02-22 09:29:04

+0

那么,我真的不需要将它添加到原型,就像你说的,我只能添加到单个实例,但其他'Array'实例将返回'undefined'为'isRangeObj',所以取决于案例,如果'undefined'就够了,所以最好将它添加到一个实例中。 – 2013-02-22 09:56:39

1

使用组成创建扩展数组的对象:

function Range(arr) { 
    this.arr = arr; 
} 

var myRange = new Range([1, 2, 3]); 

if (myRange instanceof Range) { 
    doSomethingWithRange(myRange.arr); 
} 
+1

我想这是一个解决方案。 – netbrain 2013-02-21 11:39:07

相关问题