Javascript函数组织

Javascript函数组织,javascript,oop,function,Javascript,Oop,Function,我不确定说“function x(){}”和“this.x=function(){}”之间的区别,但我必须制作一个面向对象的JavaScript,其布局如下: function PROJECT(){ ... ... ... this.main_call=function(...){ return this.recursive_call(...); } this.recursive_call=function(...){ ... var local,varia

我不确定说“function x(){}”和“this.x=function(){}”之间的区别,但我必须制作一个面向对象的JavaScript,其布局如下:

function PROJECT(){
  ...
  ...
  ...
  this.main_call=function(...){ return this.recursive_call(...); }

  this.recursive_call=function(...){
    ...
    var local,variables;
    function helper(...,ref){
      ...
      ref.recursive_call(...);
    }
    ...
    helper(...,this);
    ...
  }
}
x=new PROJECT();
x.main_call(input);

我这里的问题是,这是否是一种好的样式,或者是否有某种方法可以调用helper函数(用于停止重复相同的代码),而无需传递“this”指针。我有点担心,因为helper函数已经访问了recursive_调用中的所有局部变量,但是如果我试图直接访问this.recursive_调用,它会抛出错误。在试图声明这个时,我也遇到了变量重写的问题。helper=function(…){…}。

我不太明白您想做什么,但是您可以更改闭包。像这样的

function PROJECT(){

    this.main_call=function(){
    return recursive_call();
    }

    var local,variables;
    function helper()
    {
    recursive_call();
    }

    function recursive_call(){
    helper();
    }
}
x=new PROJECT();
x.main_call(input);
this.recursive_call=function(...){
    ...
    var local,variables;
    var ref = this;
    function helper(...){
      ...
      ref.recursive_call(...);
    }
    ...
    helper(...);
    ...
  }
如果这不适合您需要做的事情,您可以随时将递归函数更改为如下所示

function PROJECT(){

    this.main_call=function(){
    return recursive_call();
    }

    var local,variables;
    function helper()
    {
    recursive_call();
    }

    function recursive_call(){
    helper();
    }
}
x=new PROJECT();
x.main_call(input);
this.recursive_call=function(...){
    ...
    var local,variables;
    var ref = this;
    function helper(...){
      ...
      ref.recursive_call(...);
    }
    ...
    helper(...);
    ...
  }
退房

  • 如果
    main\u调用
    仅包装
    recursive\u调用
    ,则不需要它
  • 对于辅助函数,在创建函数时考虑使用函数闭包,以便它们不为每个调用创建。
  • 我个人更喜欢在助手中使用
    this
    ,而不是传递
    ref

    this.recursive_call=(function(){
      ...
      function helper(...){
        ...
        this.recursive_call(...);
      }
      return function(...)
         ... 
         helper.call(this,...);
         ...
      };
    }).call(this);
    
  • 虽然它有点复杂,但它始终保持着
    这个
    的实用性,这让我感觉更糟糕。尽管你必须经常问自己需要访问哪些对象,在哪里。如果在整个过程中使用
    这个
    没有意义,那么它就没有用处,不要使用它。”s就够了


    <>你也可以考虑一些功能方面。例如,将helper函数传递到
    recursive\u call

    以了解
    function name(){}
    vs
    var name=function(){}
    我建议阅读以下相关问题:


    你能把它改成while/for循环吗?递归通常很难读取和维护(这可能是您对当前代码感到不安的原因)。您仍然可以使用this.helper()调用的helper()函数,但重复该过程的决定是在循环逻辑中做出的