出于这样或那样的原因,我厌倦了循环遍历对象文字来获取其长度。我想在Object.prototype
上定义一个length
属性,我可以设置初始长度,但我不知道修改对象时如何更新它?
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对象都会自动执行此操作,如果你知道这是如何发生的,请启发我,如果不知道,也许你知道更新此自定义属性的方法?
如果需要对象中键数的长度,请使用Object.keys(obj).length
。
如果你疯了,想把它放在原型上。。。
Object.prototype.getKeyLength = function() {
return Object.keys(this).length;
};
任何字符串/数组对象都会自动执行此操作,如果你知道这是如何发生的,请启发我…
这些是主体对象/基本体,它发生在封面后面。
根据Object.defineProperty(),您的init猜测足够接近
您可以使用get而不是value来定义getter,在访问定义的属性时调用该getter。
演示
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);
你可以试试这个:
Object.defineProperty(Object.prototype, 'keylength', {
get: function getKeyLength() {
return Object.keys(this).length;
}
});