由于某种原因,我厌倦了遍历一个对象文字来获取它的长度。我想在length
上定义一个Object.prototype
属性,我可以设置初始长度,但是我不知道在修改对象时如何更新它?
var obj = {a:1, b:2, c:3};
Object.defineProperty(Object.prototype, 'length', {value: 0});
// obj.length === 0;
obj.d = 4;
// obj === {a:1, b:2, c:3, d:4};
// obj.length === 0;
任何String / Array对象都会自动执行此操作,如果您知道这是如何发生的那么请赐教,如果没有,那么您是否知道更新此自定义属性的方法?
答案 0 :(得分:3)
如果您想要对象中键的长度,请使用Object.keys(obj).length
。
如果你发疯并想要原型......
Object.prototype.getKeyLength = function() {
return Object.keys(this).length;
};
任何String / Array对象都会自动执行此操作,如果您知道这是怎么发生的,请启发我...
这些是宿主对象/原语,它发生在幕后。
答案 1 :(得分:1)
你的初始猜测距离Object.defineProperty()
足够近您可以使用use get而不是value来定义一个getter,当访问defined属性时会调用它。
演示
Object.defineProperty(Object.prototype, 'len', {
writeable: false,
get: function() {
return Object.keys(this).length;
}
});
var a = {
't' : 'This',
's' : 'A tsets'
};
console.log(a.len);
a['2222'] = 3;
console.log(a.len);

答案 2 :(得分:0)
你可以试试这个:
Object.defineProperty(Object.prototype, 'keylength', {
get: function getKeyLength() {
return Object.keys(this).length;
}
});