在我的 javascript 代码中,我经常需要检查某个可枚举列表中的表达式是否像这样:
if ((a == 'value1') || (a == 'value2') || (a == 'value3')) { ... do smth ... }
我可以这样写:
if (['value1', 'value2', 'value3', 'value4'].indexOf ( a ) ) { ... do smth ... }
但我认为这是不可读的。
我为Object.prototype添加属性in_arr:
Object.defineProperty(Object.prototype, 'in_arr', {
value : function(arr) {
for (var i=0; i<arr.length; i++) {
if ( arr[i] == this.valueOf() ) {
return true;
}
}
return false;
},
enumerable: false
})
现在我可以这样写:
if (a.in_arr([ 'value1', 'value2', 'value3', 'value4' ]) { ... do smth ... }
我觉得,挺好看的 但我想问:像这样更改Object.prototype是否安全?而性能呢?