代码之家  ›  专栏  ›  技术社区  ›  fmsf

如何用JavaScript定义函数的原型?

  •  0
  • fmsf  · 技术社区  · 15 年前

    如何用JavaScript定义函数的原型?我想这样做,就像我在C中那样,你可以这样做:

    void myfunction(void);
    
    void myfunction(void){
    }
    

    那么在JavaScript中有什么方法可以做到这一点呢?我这样问是因为JavaScript中需要函数声明顺序。


    编辑:

    function something(){
     var anArrayOfSomethingObjects;
     aPrivateFunction(){ 
        // does some stuff
        anArrayOfSomethingObjects[3].aPublicFunction();
     }
    
     return {
      functionA: function() { },
      aPublicFunction: function() { },
      functionC: function() { }
     }
    }
    

    privateFunction 需要访问 publicFunction 这是后来宣布的。

    我该怎么做?

    3 回复  |  直到 4 年前
        1
  •  8
  •   Artem Barger    15 年前

    JavaScript是动态语言,不需要这样做。这意味着Javascript具有动态绑定和动态类型,因此检查将在运行时进行。所以不需要像在静态语言中那样定义前向声明。

    回复编辑 :

    即使在这种情况下,您仍然不需要定义转发声明。一旦对象在运行时具有该方法或字段,它就会正常工作。但您可能已经解决了JavaScript中的范围界定问题,假设您在出现问题后提出了问题。

        2
  •  3
  •   Javier    15 年前

    你必须真正理解什么是动态语言,以及为什么你的问题没有真正意义。你的问题不在于C语言中的“定义与声明”,而在于语句的顺序。

    function whatever (params) {
       ...
    }
    

    实际上,它是赋值语句的语法糖,如下所示:

    whatever = function (params) {
       ...
    }
    

    如你所见, whatever 实际上是一个变量,它被赋予一个函数值。所以在分配它之前不能调用它。

    当然,执行顺序不必遵循词汇顺序。如果这是您的情况,您只需要确保在使用它之前分配所需的变量。如果它是一个局部变量,并且需要闭包语义,则可以先定义它,然后再赋值,如下所示:

    var myfunc = undefined;
    function first () {
       ...
       myfunc (...);
       ...
    }
    myfunc = function (...) {
       ...
    }
    
        3
  •  0
  •   SolutionYogi Eric Lippert    15 年前

    function Something()
    {
        var someObjects;
        var pub = {};
    
        var privateFunction = function() 
                              {
                                   pub.publicFunction();
                              }
    
        pub.functionA = function() {};
        pub.functionB = function() {};
        pub.publicFunction = function() {};
    
        return pub;
    };
    

    更多信息和示例: http://www.wait-till-i.com/2007/08/22/again-with-the-module-pattern-reveal-something-to-the-world/