如何在JavaScript中定义函数的原型?

时间:2009-07-01 17:01:35

标签: javascript

如何在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 个答案:

答案 0 :(得分:8)

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

回复编辑

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

答案 1 :(得分:3)

你必须真正理解什么是动态语言,以及为什么你的问题没有多大意义。你的问题与C上的“定义与声明”无关,它最多关于语句顺序。

JavaScript中的

(与大多数动态语言一样)是一个像这样的函数定义

function whatever (params) {
   ...
}

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

whatever = function (params) {
   ...
}

如您所见,whatever实际上是一个变量,并为其分配了一个函数值。所以在分配之前你不能打电话。

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

var myfunc = undefined;
function first () {
   ...
   myfunc (...);
   ...
}
myfunc = function (...) {
   ...
}

答案 2 :(得分:0)

您正在寻找的是模块模式:

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/