如何引用在构建类之后添加到类中的所有函数? (可能是一个数组)而不使用prototype
。
我已经构建了一个类foo()
,并希望添加添加新功能的功能
可以在以后使用。
var f = new foo();
然后
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框架很不错,但在这里我们要避免依赖,并保持轻量级 此外,它没有有趣,有:-)不要误解我,我没有反对使用原型。
答案 0 :(得分:0)
除了@Pointy的评论之外,当您将this
分配给__self
时,您错过了var self
。在我阅读代码时,__self
是foo
对象的变量,因此您在使用它时必须将其引用为this.__self
。
顺便说一句,你为什么不使用任何框架呢?当我没记错时,Prototype框架提供了这样的功能。
修改强>: 只是为你查找。这个功能应该完全按照你想要的去做。 AddMethods