由于js是非常灵活的语言,我总是想知道是否可以创建自定义数据类型。最后我决定尝试创建一个。我不是在谈论简单的课程,而是谈论更像js natives的事情。我要创建范围数据类型。数学范围如(2.5; 9)或(-Infinity; 5)。也支持范围之和(2; 7] u(9; 27)。它允许轻松创建迭代器,例如2-8,步长为0.25。我喜欢它支持常规的js语法,例如for ... in,或者基于step属性计算的length属性。
遗憾的是我注意到 _ iterator _ 仅在ff中受支持,但仍然可以通过使其他属性不可枚举来准备迭代器。
我知道:
-Object.create /
的DefineProperties
-getters / setter方法
- 使用严格(以最大限度地提高性能)
- _ 迭代器 _ (实际上不受支持)
还有什么可以用的吗?
大气压。我这样做:
我会在本地范围内创建一些隐藏的变量,以便在每次更改步和存储范围后预先计算迭代器。使两者对用户完全不可见。除步骤外,所有属性都不可枚举 - 将使用迭代器重新计算添加theese。如此简单的范围[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
这是好主意,还是有其他更合适的方法呢?是否可以允许此类使用+ - ?
之类的运算符答案 0 :(得分:1)
在JavaScript(第5版)中,一个
但是,已经创建了许多“自定义数据类型”;随意创造另一个。例如,jQuery(操纵DOM元素的序列),moment.js(日期替换)和big.js(带操作的“大数字”类型)都是“自定义数据类型” - 尽管方法替换为运算符。
否则,不确定问题的其余部分在哪里......除了关闭。