я пытаюсь вызвать общественный элемент в функцию, и она выглядит как «не определено», однако функция работает ...Почему «Это» действует в качестве частного члена в функции javascript в этом случае?
- EDIT -
Как отметил @Shane Voisard this
действует как член родителя моей функции.
Решение должно дать название функции (как подчеркнул Шейн в ответ).
... или прикрепить функцию к имени:
MySite.Public.Logo = {
inject : function(target){
this.name = 'Logo';
...
}
}
В консоли:
MySite.Public.Modules.Logo.name; //return "Logo"
и так далее ... ТНХ SO
-/EDIT -
Моя файловая система следующая
root folder :
-rw-r--r-- 1 www-data www-data 1921 avril 3 17:31 0.js
drwxr-xr-x 9 www-data www-data 4096 avril 3 17:37 public
public folder :
-rw-r--r-- 1 www-data www-data 214 avril 3 17:37 0.js
drwxr-xr-x 2 www-data www-data 4096 avril 3 17:40 modules
drwxr-xr-x 2 www-data www-data 4096 avril 3 17:40 factories
drwxr-xr-x 2 www-data www-data 4096 avril 3 17:40 functions
drwxr-xr-x 2 www-data www-data 4096 avril 2 22:22 singleton
module folder :
-rw-r--r-- 1 www-data www-data 28 mars 31 06:07 1.js
-rw-r--r-- 1 www-data www-data 348 avril 3 17:51 logo.js
Загрузка производится в следующем порядке:
root/0.js
инициализирует MySite = {}
public/0.js
инициализирует MySite.Public = {}
module/1.js
инициализирует MySite.Public.Modules = {}
Когда все остальные необходимые файлы будут загружены, public/0.js
вызовы MySite.Public.Modules.Logo()
, которые были инициализированы при logo.js
был загружен в браузер. Функция работает, я могу получить возврат от logo.js. Но ни один из членов this
не публично accessibles ...
Содержание logo.js
:
MySite.Public.Modules.Logo = function(){
this.name = 'Logo';
this.build = function(){
var logo = MySite.Public.Factories.HTML.make('logo');
return logo;
};
this.inject = function(target){
var logo = this.build();
var target = MySite.Public.Functions.ToolBox.getElementByName(target); //getElementByName is a custom function
target.appendChild(logo);
};
}
В консоли:
MySite.Public.Modules.Logo.inject('body'); // undefined is not a function...
MySite.Public.Modules.Logo.build(); // undefined is not a function...
MySite.Public.Modules.Logo.name; // ""
typeof MySite.Public.Modules.Logo; // "function"
содержания logo.js
: // для тестирования функции I указать цель для конструктора
MySite.Public.Modules.Logo = function(target){
this.name = 'Logo';
this.build = function(){
var logo = MySite.Public.Factories.HTML.make('logo');
return logo;
};
this.inject = function(target){
var logo = this.build();
var target = MySite.Public.Functions.ToolBox.getElementByName(target);
target.appendChild(logo);
};
this.inject(target);
}
В консоли:
MySite.Public.Modules.Logo('body'); //works
И еще ...
MySite.Public.Modules.Logo.inject('body'); // undefined is not a function...
MySite.Public.Modules.Logo.build(); // undefined is not a function...
MySite.Public.Modules.Logo.name; // ""
typeof MySite.Public.Modules.Logo; // "function"
ли кто-то имеет ключ, пожалуйста, на то, что я делаю неправильно?
Да, вы правы ... но я не могу понять, почему. Я тебя провожаю по дороге. О инновации24/MySite, действительно MySite === innov24, но я попытался сделать ma question generic. –
У меня есть u_u –