稍后在不使用.prototype的情况下将其他函数添加到类中

时间:2010-11-04 14:27:28

标签: javascript oop function methods

如何引用在构建类之后添加到类中的所有函数? (可能是一个数组)而不使用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框架很不错,但在这里我们要避免依赖,并保持轻量级 此外,它没有有趣,有:-)不要误解我,我没有反对使用原型。

1 个答案:

答案 0 :(得分:0)

除了@Pointy的评论之外,当您将this分配给__self时,您错过了var self。在我阅读代码时,__selffoo对象的变量,因此您在使用它时必须将其引用为this.__self

顺便说一句,你为什么不使用任何框架呢?当我没记错时,Prototype框架提供了这样的功能。

修改: 只是为你查找。这个功能应该完全按照你想要的去做。 AddMethods