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

时间:2015-06-24 03:24:04

标签: javascript object properties updating custom-properties

由于某种原因,我厌倦了遍历一个对象文字来获取它的长度。我想在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对象都会自动执行此操作,如果您知道这是如何发生的那么请赐教,如果没有,那么您是否知道更新此自定义属性的方法?

3 个答案:

答案 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;
  }
});