代码之家  ›  专栏  ›  技术社区  ›  elPastor

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

  •  0
  • elPastor  · 技术社区  · 7 年前

    我创建了一个需要传递dictionary对象来初始化的对象,并且具有属性(比如 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()

    JS标题: http://jsfiddle.net/2uMjv/571/

    2 回复  |  直到 7 年前
        1
  •  0
  •   woat    7 年前

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

        2
  •  0
  •   Jonas Wilms    7 年前

    你为什么不设置属性?:

     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"));
    
    推荐文章