我想添加"插入"数组上的方法。 所以我这样做:
> Array.prototype.insert = function(index, element){
this.splice(index, 0, element);
};
它有效:
> a = [1,2,3]
[1, 2, 3]
> a.insert(0, 4)
undefined
> a
[4, 1, 2, 3]
但是有不良副作用:
> for (i in a){console.log(i)}
0
1
2
3
insert
> for (i in a){console.log(a[i])}
4
1
2
3
function (index, element){
this.splice(index, 0, element);
}
此行为不是故意的,会破坏我使用的其他库。 对此有什么优雅的解决方案吗?
答案 0 :(得分:8)
Object.defineProperty
有效,但旧版浏览器不支持此功能。 (compatibility table)
Object.defineProperty(Array.prototype, 'insert', {
enumerable: false,
value: function(index, element){
this.splice(index, 0, element);
}
});
答案 1 :(得分:0)
在此循环中,不显示继承的属性(插入方法)。
for (i in a){if (a.hasOwnProperty(i)) {console.log(i)}}
因此,来自Object的每个对象都继承了hasOwnProperty方法。此方法可用于确定对象是否具有指定的属性作为该对象的直接属性;与in运算符不同,此方法不会检查对象的原型链。
此方法与所有浏览器兼容