2010-02-15 82 views
1

我不完全确定“function x(){}”或“this.x = function(){}”之间的区别,但我必须制作一个面向对象的JavaScript,这样的:Javascript function organization

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函数已经访问了recursive_call中的所有局部变量,但是如果我尝试直接访问this.recursive_call,它会引发错误。我在尝试声明this.helper = function(...){...}时遇到了变量覆盖的问题。

回答

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

退房Learning Advanced JavaScriptJohn Resig

  1. 如果main_call只包装recursive_call,则不需要。
  2. 对于帮助程序函数,请考虑在创建函数时使用函数闭包,以便在每次调用时都不会创建它们。
  3. 我个人更喜欢在助手中使用this而不是通过ref

    this.recursive_call=(function(){ 
        ... 
        function helper(...){ 
        ... 
        this.recursive_call(...); 
        } 
        return function(...) 
        ... 
        helper.call(this,...); 
        ... 
        }; 
    }).call(this); 
    

虽然它是一个更复杂一点,它让this有用整个这感觉更OO给我。尽管你必须总是问自己你需要访问哪些对象,在哪里。如果它始终没有意义,那么它就没用了,请不要使用它。 Revolution42answer就足够了。

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

0

你能不能把它变成了一会儿/ for循环?递归往往难以阅读和维护(这可能是为什么你对当前的代码感到不安)。您仍然可以拥有由this.helper()调用的helper()函数,但重复该过程的决定在循环逻辑中。