Javascript功能组织

时间:2010-02-15 12:26:21

标签: javascript oop function

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

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);

我的问题是这是否是好的样式,或者是否有某种方法我可以调用辅助函数(用于停止反复复制相同的代码),而不传递“this”指针。我有点担心,因为辅助函数已经访问recursive_call中的所有局部变量,但如果我尝试直接访问this.recursive_call,则会抛出错误。在尝试声明this.helper = function(...){...}时,我也遇到了变量覆盖的问题。

4 个答案:

答案 0 :(得分:0)

我不太明白你想要做什么,但你可以改变你的闭包。像这样的东西

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(...);
    ...
  }

答案 1 :(得分:0)

Learning Advanced JavaScript查看John Resig

  1. 如果main_call仅包装recursive_call,则不需要。{/ li>
  2. 对于辅助函数,请考虑在创建函数时使用函数闭包,以便不为每次调用创建它们。
  3. 我个人更喜欢在助手中使用this而不是传递ref

    this.recursive_call=(function(){
      ...
      function helper(...){
        ...
        this.recursive_call(...);
      }
      return function(...)
         ... 
         helper.call(this,...);
         ...
      };
    }).call(this);
    
  4. 虽然它有点复杂,但它保持this有用,在整个过程中我感觉更多OO。虽然你必须总是问自己需要访问哪些对象,在哪里。如果始终使用this没有意义,则无效,请勿使用它。 Revolution42answer就足够了。

    您也可以考虑一些功能方面。例如,将帮助函数传递给recursive_call

答案 2 :(得分:0)

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

/questions/336859/javascript-var-functionname-function-vs-function-functionname

答案 3 :(得分:0)

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