2015-05-27 4 views
1

У меня есть следующие в моем JS файл:Uncaught TypeError: не функция, а функция существует

var Field_File = function(_) 
{ 
    var _objects = null; 

    var Init = function(instance, json) 
    { 
     // load _objects 
    } 

    var ImgLoad = function(elem, type) 
    { 
     //do things with _objects 
    } 
} 

Теперь в моем PHP, я получил:

<img id="file_uploader2_button" src="http://localhost/img/icons/up.png" onload="Field_File.ImgLoad(this, 'img');"> 

Я проверить, что JS загружается в мою страницу правильно, и я звоню другие функции JS через тот же PHP страницы без проблем:

body onload="Field_File.Init('1', {$json});" 

Но я у.е. редко:

Uncaught TypeError: Field_File.ImgLoad is not a function

Я что-то пропустил в этом звонке?

ответ

4

Изменить объявление вашего модуля (буквальный объект) для

var Field_File = { 
    Init: function(instance, json){ 
    }, 
    ImgLoad: function(elem, type){ 
     //do things 
    } 
} 

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

var Field_File = (function(){ 
    var _objects = null; 
    var Init = function(instance, json){ 
     // load _objects 
    } 

    var ImgLoad = function(elem, type){ 
     //do things with _objects 
    } 

    return { 
     Init:Init, 
     ImgLoad:ImgLoad 
    } 
})(); 

Многие вариации возможны, поэтому важно понять, что здесь происходит, чтобы вы могли адаптировать его к вашим потребностям.

+0

Пока это работает, есть ли способ сделать это с кодом, который я опубликовал? Я спрашиваю: у Field_File есть другие объекты ('var _objects = null; '), который устанавливается одним способом, но используется в других. Если нет, его не стоит беспокоиться. Я думаю, ваш метод будет полностью прекрасен. Просто хотел убедиться. – MyCodeSucks

+0

@MyCodeSucks Да, вы можете использовать функцию для защиты некоторых варов. См. Править. –

+0

Это потрясающе. Спасибо! – MyCodeSucks

1

Изменить ImageLoad в собственность Field_File, используя this. Объявляя его здесь var, вы немного имитируете частную собственность.

var Field_File = function(_) 
    this.Init = function(instance, json) 
    { 
    } 

    this.ImgLoad = function(elem, type) 
    { 
     //do things 
    } 
} 
Смежные вопросы