2014-11-06 4 views
0

В объекте form ниже, из функции «проверка», как мне вызвать методы «показать» и «скрыть» функции уведомления?Как вызвать методы функции из другой функции

(function (namespace, $, undefined) { 
    var form = { 
     check : function(){ 
      form.notification.show(); // Generates an error 
     }, 

     notification : function(){ 
      this.show = function(){ 
       ... 
      }; 
      this.hide = function(){ 
       ... 
      }; 
     } 
    }; 
}(window.namespace = window.namespace || {}, jQuery)); 

С form.notification.show() я получаю следующее сообщение об ошибке:

Uncaught TypeError: Не удается прочитать свойство «шоу» неопределенной

ответ

1

Пытаться определить notification за пределами form, а затем обращаться к нему:

var notification : { // no function here 
     show : function(){...}, // avoid "this" 
     hide : function(){...} 
}; 

var form = { 
    check : function(){ 
     notification.show(); // <-- Use here 
    }, 

    notification : notification // and here 
}; 

(я опустил jQuery код защиты для ясности).

Следующая проблема заключается в том, что вы назначаете функцию this, когда выполняется функция notification(). this не notification!

+0

Странно - это, кажется, не имеет никакого эффекта. Теперь мне интересно, есть ли конфликт в моем «рабочем» коде ... – verism

+0

Ну, похоже, что у меня есть * доступ к функции уведомления в моем исходном коде. Если я запустил 'console.log (form.notification)' из функции проверки, он вернет скрипт. Есть предположения? – verism

+0

Смотрите мои правки. 'show' помещается в' this' и 'this! == form.notification' (скорее всего). –

0

Вы оградил его, так что вам нужно, чтобы вернуть его и что выведет его для вас, если вы нажмете на консоль хром, вы увидите, что у вас есть доступ к объекту формы

(function (namespace, $, undefined) { 

var form = { 

     check : function(){ 
      form.notification.show(); // Generates an error 
     }, 

     notification : function(){ 
      this.show = function(){ 

      }; 
      this.hide = function(){ 

      }; 
     } 


}; 
return{form:form};}(window.namespace = window.namespace || {}, jQuery)); 

Все, что я сделал в код добавляется

return{form:form}; 

После объекта формы. Надеюсь, что это помогает

EDIT

Если вы хотите только выставить определенные части формы, например, только уведомления, вы могли бы изменить возвращение, как так:

return{form.notification: notification} 
+0

Не уверен, почему меня проголосовали, но надеюсь, что это все равно поможет. – Jay

+0

Не совсем уверен, почему он был ниспровергнут. Однако это не является жизнеспособным вариантом, так как ничто не может следовать за заявлением о возврате. – verism

+0

Неправильно скопируйте приведенный выше код и вставьте его в консоль. затем введите window.namespace и посмотрите, что он возвращает. – Jay

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