вы должны попробовать следующую функцию, которую я писал о времени, когда появился AJAX, и она работает с hastables хорошо сформированными иерархиями пространств имен, как в (продолжить чтение)
Введение бесшовных догадки в JavaScript Определите, существует ли пространство имен / имя-переменной. Перед записью в них проверьте наличие пространства имен в переменных и объектах среды.
Угадайте, существует ли «Book1.chapter22.paragraph37», не вызывая ошибок, и извлеките / отправьте данные, если они существуют, с помощью простейшего выражения:
Синтаксис вызова:
isNS( [string], [num] )
Пример:
var nsresult =
isNS( "Book1.chapter22.paragraph37", -1 );
if( nsresult[0] ){ send( nsresult[1] ) else notify( nsresult[4], nsresult[2] ) };
et c et c
// опустить модификатор или 0, false и undefined для получения логического значения
isNS( "myObject.property.subProperty.myMethod" );
_> Boolean : true/false
Модификатор Возможные значения:
_> -1; (0|false|undefined); ( 1|true ); 2; 3 or 4.
Описание:
(- 1) _> возвращает объект массива, содержащий полную инокуляцию.
(0) _> необязательно; возвращает Boolean: true (если существует полная цепочка NS): false (если она разорвана).
(1) _> если NS * запрос существует, case true: возвращает существующее значение; если нет, case false: возвращает последний допустимый контекст, если он есть, или глобальный объект, если root не существует.
(2) _> возвращает массив существующих пространств имен в запросе аргументов.
(3) _> возвращает массив, содержащий все указанные пространства имен.
(4) _> возвращает исходную строку запроса.
function isNS(arg,f) { /*b.b. Troy III p.a.e.*/
var i, a = arg.split("."), c = this, s = [], b, r;
f = f || 0;
for( i in a ) {
c ? a[i] in c ? ( c = c[ a[i] ], s.push( a[i] ), b = !0 ) : b = !1 : 0;
}
r = [ b, c, s, a, arg ];
return f < 0 ? r : r[+f||f]
}
* NS - уже означает знакомые инициалы "Пространства имен". [Это всего лишь небольшой кластер на реальном ИИ, но очень важный!]
;
function isNS(arg,f) { /*b.b. Troy III p.a.e.*/
var i, a = arg.split("."), c = this, s = [], b, r;
f = f || 0;
for( i in a ) {
c ? a[i] in c ? ( c = c[ a[i] ], s.push( a[i] ), b = !0 ) : b = !1 : 0;
}
r = [ b, c, s, a, arg ];
return f < 0 ? r : r[+f||f]
}
;
book1 = {
chapter1 : {
paragraph1 : ["first line","second line"],
paragraph2 : ["first line","second line"],
paragraph3 : ["first line","second line"] },
chapter2 : {
paragraph1 : ["first line","second line"],
paragraph2 : ["first line","second line"],
paragraph3 : ["first line","second line"] },
chapter3 : {
paragraph1 : ["first line","second line"],
paragraph2 : ["first line","second line"],
paragraph3 : ["first line","second line"] }
}
;
console.log( 'Boolean for:"book1.chapter2.paragraph3"' )
;
console.log( isNS("book1.chapter2.paragraph3", 0 ) )
;
console.log( 'Retrieve:"book1.chapter2.paragraph3"' )
;
console.log( isNS("book1.chapter2.paragraph3", 1 ) )
;