javascript对象-使用点表示法访问子属性

时间:2018-09-29 20:31:06

标签: javascript attributes

我创建了一个需要传递字典对象以进行初始化的对象,并且该对象具有属性(例如length)。我希望能够通过传递类似以下内容来简单地访问字典的key : value对:

myNewObj['a']myNewObj.a

不是必须通过myNewObj.dictionary['a'],但不知道如何通过。

有没有一种方法可以设置动态属性,如果没有其他属性或方法退出,它将改为查看字典并找到关联的键?

var newObject = function(dictionary) {
    this.dictionary     = dictionary;
    this.length         = dictionary[[Object.keys(dictionary)[0]]].length;

    this.get = function (column) {
        return this.dictionary[[column]];
    }
};

var myNewObj = new newObject({
    a   : [1,2,3],
    b   : [4,5,6]
});

console.log(myNewObj.get('a'));

我已经对此进行了更新,以显示一种有效的.get()方法,但是它仍然不是我想要的。

jsFiddle:http://jsfiddle.net/2uMjv/571/

2 个答案:

答案 0 :(得分:0)

尽管这可能不完全适合您的动态属性用例,但我能想到的最接近的方法是扩展原型。至少通过使用Object.setPrototypeOf *,您可以避免分别定义每个方法,并具有一组基本功能来应用于这些newObject的每个。

var newObject = function(dictionary) {
    this.dictionary = dictionary;
    this.length = dictionary[[Object.keys(dictionary)[0]]].length;

    this.get = function(column) {
        return this.dictionary[[column]];
    }
};

// Essentially a wrapper constructor.
var createNewObject = function(dictionary) {
    Object.setPrototypeOf(dictionary, new newObject(dictionary));
    return dictionary;
}

var myNewObj = createNewObject({
    a   : [1,2,3],
    b   : [4,5,6]
});

console.log(myNewObj['a']);
console.log(myNewObj.get('b'));

* You may want to look at the potential drawbacks in using this.

答案 1 :(得分:0)

为什么不设置属性? :

 class Dictionary {
  constructor(dictionary) {
   Object.assign(this, dictionary);
  }

  get length() {
    return Object.keys(this).length;
  }

  get(column) {
    return this[column];
  }
}

var dict = new Dictionary({
  a   : [1,2,3],
  b   : [4,5,6]
});

console.log(dict.a, dict["a"], dict.get("a"));