繁体   English   中英

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

[英]javascript Object - access child property using dot notation

我创建了一个需要传递字典对象进行初始化的对象,并且该对象具有属性(如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/

尽管这可能不完全适合您的动态属性用例,但我能想到的最接近的方法是扩展原型。 至少通过使用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'));

* 您可能希望查看使用此功能的潜在缺点。

您为什么不只设置属性?

 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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM