Скажем, у меня есть что-то подобное в javascripts:
var obj = {
subObj : {}
};
var type = 'subObj';
Как я могу получить obj's
subObj
w/type
? Например, я хотел бы сделать что-то вроде:
obj.(type);
Скажем, у меня есть что-то подобное в javascripts:
var obj = {
subObj : {}
};
var type = 'subObj';
Как я могу получить obj's
subObj
w/type
? Например, я хотел бы сделать что-то вроде:
obj.(type);
obj[type]
Вы используете нотные обозначения.
Доступ к свойствам осуществляется по имени, используя либо точечную нотацию:
MemberExpression . IdentifierName
CallExpression . IdentifierName
или обозначение скобки:
MemberExpression [ Expression ]
CallExpression [ Expression ]
Вы можете рассматривать объекты, подобные ассоциативным массивам, в JavaScript, поэтому вы сможете получить доступ к внутреннему объекту, например:
var obj = {
subObj : {}
};
var type = "subObj";
var subObj = obj[type];
Если кто-то задавался вопросом, как получить доступ к дополнительным свойствам (динамически), я нашел способ для этого, если есть более простой способ, сообщите мне:
function getPropertyByKeyPath(targetObj, keyPath) {
var keys = keyPath.split('.');
if(keys.length == 0) return undefined;
keys = keys.reverse();
var subObject = targetObj;
while(keys.length) {
var k = keys.pop();
if(!subObject.hasOwnProperty(k)) {
return undefined;
} else {
subObject = subObject[k];
}
}
return subObject;
}
Например:
var o = {result : {info:{ version:1, comment: 'test'}}};
var subObject = getPropertyByKeyPath(o, 'result.info');
console.log(subObject);
приведет к:
{version: 1, comment: "test"}
obj[type]
не имеет никакого смысла - вы не получаете доступа к ТИПАМ, это простые свойства - можно получить доступ к ним через obj[keyName]
или что-то подобное, но с использованием type
крайне запутанно и верным признаком отсутствия понимания
var obj = {
subObj : {}
}
var type = 'subObj';
console.log(typeof obj.subObj); //will print "object"
console.log(obj.subObj); //will print "{}"
//You can add a new propery like this:
obj.subObj.newProperty = 'hello';
console.log(typeof obj.subObj.newProperty); //will print "string"
console.log(obj.subObj.newProperty); //will print "hello"
// you can also add new properties like this
obj.subObj['newProperty'] = 5; // this is very useful if you have to add properties with names that use reserved words or that contain illegal characters.
console.log(typeof obj.subObj.newProperty); //will print "number"
console.log(obj.subObj.newProperty); //will print "5"
//In the case where you're using reserved or illegal words you'l have to do this
obj.subObj['new/Property'] = 'cat'; // this is very useful if you have to add properties with names that use reserved words or that contain illegal characters.
console.log(typeof obj.subObj['new/Property']); //will print "number"
console.log(obj.subObj['new/Property]); //will print "5"
// and add another property in the chain:
obj.subObj['new/PropertyGroup']={
'illegal/name':'value',
acceptableName: 5,
andotherObject:{},
'illegally&Named(object)':{}
}