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