Скажем у меня есть эта функция, которая динамически создает свое пространство имен для меня, когда я просто передать ему строку, (я уверен, что в основном то, что библиотека YUI JS делает):Как вы можете программно добавить функцию в вложенное пространство имен?
MyObj.namespace('fn.method.name');
приведет к
MyObj.fn.method.name = {}
создается - все три уровня эквивалентны пустому объекту.
Теперь, что я хочу сделать, это сделать последний уровень, в данном случае name
, установленный в функцию, но без необходимости повторного создания вновь созданного объекта.
Так вместо того, чтобы сделать это:
function fnName() { /* some code here */ }
MyObj.namespace('fn.method.name');
MyObj.fn.method.name = new fnName();
я хочу назвать что-то вроде:
MyObj.add('fn.method.name', fnName);
и внутренне, метод add
бы программно экземпляр переданному в функции:
MyObj.fn.method.name = new fnName()
В способе, которым я его реализовал, я могу создать объект пространства имен и установить его на пустой объект, однако, когда я пытаюсь создать экземпляр переданной функции и связать это пространство имен с переданной функцией, она никогда не добавляется в пространство имен. Вместо этого всегда возвращается пустой объект. Есть идеи?
Редактировать: Вот namespace
метод. это прикреплено к базовому объекту как объект JSON, поэтому, пожалуйста, игнорировать форматирование:
namespace: function (ns) {
var _ns = ns.split('.'),
i = 0, nsLen = _ns.length,
root = this;
if (_ns[0] === gNS) {
_ns.shift();
nsLen = _ns.length;
}
for (i = 0; i < nsLen; i++) {
// create a property if it doesn't exist
var newNs = _ns[i];
if (typeof root[newNs] === "undefined") {
root[newNs] = {};
}
root = root[newNs];
}
return root;
}
edit2 - Убрана прошел в fn
аргумент
Где вы получили функцию пространства имен() из? –
Вы противоречите себе. Сначала вы говорите, что хотите установить 'имя' в функцию, но затем вы говорите, что хотите установить его в результат' new fnName() '. –
Очевидно, что «все три уровня» не могут быть пустыми объектами: объект fn содержит свойство метода, а объект метода содержит свойство name. –