如何在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
。
我该怎么做?
答案 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/