正在更新JavaScript中的自定义对象属性



出于这样或那样的原因,我厌倦了循环遍历对象文字来获取其长度。我想在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;
  }
});

相关内容

  • 没有找到相关文章

最新更新