2014-10-02 4 views
0

для моего сайта с jquery и jquery.ui загружен. Я попробовал следующий эксперимент.- все члены класса javascript созданы равными?

Если в хромированной консоли я набираю ...

jQuery.ui 
>Object {version: "1.9.1", keyCode: Object, ie: false, ie6: false, plugin: Object…} 

но если я просить его типа я получаю ..

typeof this["jQuery.ui"] 
>"undefined" 

Может кто-нибудь объяснить, почему это? Как бы/я должен был сказать, существует ли jQuery.ui? .... если имя jQuery.ui содержалось в строковой переменной, как бы использовать эту переменную для проверки существования ... например.

var myvar = "jQuery.ui"; 
typeof this[myvar]; 
+4

Вы должны были бы использовать 'это [ "Jquery"] [ "щ"]', чтобы получить свойство собственности. Просто введите 'typeof jQuery.ui'. Почему у вас есть это «имя» как строковое значение? – Bergi

+1

См. Мой ответ здесь http://stackoverflow.com/questions/18891939/javascript-retrieve-object-property-path/18892019#18892019 – elclanrs

+0

Итак, из этого я собираюсь, используя строковые кавычки, я могу вызвать переменную что-то с периодом , например. Jquery.ui. но если я действительно хочу ссылаться на свойство свойства, мне нужно разбить его, как говорит Берги выше. Что касается, почему, я пишу общую процедуру загрузки javascript и думал, что было бы здорово это сделать. –

ответ

2

При вводе jQuery.ui вы получаете доступ к глобальной переменной jQuery, а затем задать этот объект для свойства с именем ui.

this["jQuery.ui"] запрашивает глобальный объект для объекта с именем "jQuery.ui". Это совершенно другая вещь.

как бы/должен ли я сказать, существует ли jQuery.ui?

Легче будет:

if (jQuery && jQuery.ui) { 
    // jQuery.ui exists 
} 

, если имя "jQuery.ui" содержится в строковой переменной, как бы я использовать эту переменную, чтобы проверить Существование

Не делай этого. Не храните имена переменных в виде строк. Это плохая идея. Особенно, если вы пытаетесь проверить глобальные переменные.

1

, если имя «jQuery.ui» содержится в строковой переменной, как бы я использовать эту переменную для проверки существования

Если вы действительно хотите сделать это, попробуйте следующий код:

function existsOn(prop, obj){ 
 
    var parts = prop.split('.'); 
 
    for(var i=0; i < parts.length; i++){ 
 
     obj = obj[parts[i]]; 
 
     if(!obj){ 
 
      return false; 
 
     } 
 
    } 
 
    if(obj){ 
 
     return true; 
 
    } 
 
    return false; 
 
} 
 
var str = "jQuery.ui"; 
 
alert("Exists: " + existsOn(str, window));

Смежные вопросы