2013-12-19 45 views
0

由于js是真正灵活的语言,我总是想知道是否可以创建自定义数据类型。最后我决定尝试创建一个。我不是在谈论简单的课程,而是在谈论更像js本地人的东西。我将创建范围数据类型。数学范围例如(2.5; 9)或(-Infinity; 5)。还支持范围的总和(2; 7)u(9; 27)。它允许轻松地创建迭代器,例如2-8,步长为0.25。倒是喜欢它支持正常的js语法如,对于...在,或length属性calculeted基础上步财产。javascript - 自定义数据类型 - 我需要什么/我应该了解什么

可悲的是我已经注意到,_ 迭代 _仅支持在FF,但仍它应该有可能是因为其他的属性不可枚举准备迭代

我知道:

-Object.create /的DefineProperties
-getters/setter方法
次使用严格的(以最大限度地提高性能)
- _ 迭代 _(实际上不支持)

还有什么可能是有用的?

Atm。我会这样做:

我会在本地范围内创建一些隐藏的变量,以便在每次更改步骤和存储范围后预先计算迭代器。使用户完全看不见。除了步骤之外,所有属性都不可枚举 - 这些属性将添加迭代器重新计算。就这么简单的范围[2; 7]第2步会是什么样子:

local scope: 
ranges:[[2;7]] // more arrays if it'd be sum 
iterator:[2,4,6] 
//other internal variables 

not enumerable: 
array: // returns copy of iterator using getter 
//some other useful properties 

enumerable: 
0:2 
1:4 
2:6 

这是好主意,或者有其他更合适的方式来做到这一点?是否有可能让这个班级使用+ - 等运算符?

回答

1

在JavaScript(编5),一个

  • 不能创建自定义语法语法或文字的形式;
  • 无法超负荷运营商

然而,许多 “自定义数据类型” 已创建;随时创造另一个。例如,jQuery(操作DOM元素的序列),moment.js(一个Date替换)和big.js(一个带有操作的“大数”类型)都是“自定义数据类型” - 尽管方法替代为运算符

否则,不确定问题的其余部分在哪里..除非关闭。