Как мне ссылаться на все функции, добавленные в класс после того, как класс был построен ? (Возможно в виде массива) и без использования prototype
.
Я создал класс foo()
и хотел бы добавить функциональность для добавления новых функций
это может быть использовано позже.
var f = new foo();
1010 * тогда *
f.addfunc('bar',function(){/*code*/});
, чтобы f.bar();
можно было использовать позже.
Экспорт (?) Функций с помощью foo.__func_expose(funcname , function );
не работает.
(вероятно, я делаю это неправильно.) Кажется, есть ошибка. (подробности см. ниже).
Цель состоит в том, чтобы иметь массив, содержащий все добавленные и фактические функции, чтобы его можно было вызывать / заменять позже.
Реально ли в javascript выставлять новые имена функций из публичной функции?
Я бы хотел достичь чего-то вроде
var MyExtendedFoo = foo();
MyExtendedFoo.__func_add("bar",(function (a, b){
alert('called : anon-func-we-named-bar'); return 2+a+b;}));
MyExtendedFoo.bar(1,3); // <---this does not work.
// It should alert a message, then return 6.
Фактический код на данный момент
function foo(){
// we store reference to ourself in __self
this.__self = arguments.callee;
var self = arguments.callee;
// array that holds funcname , function
if (!self.__func_list_fname) self.__func_list_fname = [];
if (!self.__func_list_func) self.__func_list_func = [];
// allow foo.__func_expose(); register to public
self['__func_expose'] = function(){
var self = __self;
for(var i=0;i<self.__func_list_fname.length;i++){
self[''+self.__func_list_fname[i]+''] = self.__func_list_func[i];
// <---This part seems wrong. How do I do it?
};
return __self.__func_return();
};
// allow foo.__func_add( funcname , function );
self['__func_add'] = function(f,v){
var self = __self;
self.__func_list_fname.push(f);
self.__func_list_func.push(v);
// tell itself to expose the new func as well as the old ones.
return __self.__func_expose();
};
// build obj from known list and return it.
self['__func_return'] = function(){
var self = __self;
var obj = {};
obj['__func_expose'] = self['__func_expose'];
obj['__func_add'] = self['__func_add'];
obj['__func_return'] = self['__func_return'];
for(var i=0;i<self.__func_list_fname.length;i++){
obj[''+self.__func_list_fname[i]+''] = self.__func_list_func[i];
};
return obj;
};
// Return ourself so we can chain
return self.__func_return();
}
Да. Я сделал мое домашнее задание. Я все еще что-то упускаю.
@ philgiese фреймворки хороши, но здесь мы хотим избежать зависимости и сделать ее легкой.
Кроме того, тут нет веселья , не так ли :-) Не поймите меня неправильно, я ничего не имею против использования прототипа.