JavaScript中用于标记匿名函数的“冒号”是什么?

65

这段代码是指什么?

queryString: function() {

//some code

}

我在WebConsole(Firefox)中测试了它,但它无法执行,所以我认为它不等同于function queryString() {}

那么它到底是什么?


查询字符串应为:queryString = - Diodeus - James MacFarlane
5
它被用于在对象或类中定义函数,因此我认为你已经把它超出了对象的范围。 - Dampsquid
你应该在 https://www.w3schools.com/js/js_function_invocation.asp 中查看“作为方法调用函数”的部分。 - Jing He
5个回答

87

你漏掉了一些代码,但我认为它是像这样的对象声明的一部分:

var obj = {
  queryString: function() {
    //some code
  }
};
obj.queryString();

它将一个函数分配为对象字面量的属性。这相当于:

var obj = {};
obj.queryString = function() { ... };
obj.queryString();

一般来说,对象字面量的语法看起来像这样:

{ key: value, otherKey: otherValue };

所以,这段代码在控制台中无法正常工作的原因是它没有被包含在{}字符中,表示对象字面量。而且这种语法仅在对象字面量中有效。


2
这不是缺少代码。请阅读标记函数 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/label#Labeled_function_declarations - dy_
@dy_ 这个答案是2012年的。请随意更新。 - java-addict301

13
这可能是在一个类似于以下的 map/object 声明中:
var obj = {
    queryString: function() {
        alert('here');
    },
    eggs: function() {
        alert('another function');
    }
};

obj.queryString();

所以它就像那个对象的属性 :) 谢谢! - knownasilya

10

:用于定义对象及其属性。

var obj = {
   queryString: function() {
      //some code
   }
}
现在obj.queryString是你的函数。

查询字符串是 obj 变量中的对象吗?我以为 queryString 是该函数的名称。 - carloswm85
@CarlosW.Mercado queryString现在是obj对象内的一个属性。obj.queryString是一个对象属性,恰好是一个函数。 - gen_Eric

10

这是一个标签 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/label

var i, j;

loop1:
for (i = 0; i < 3; i++) {      //The first for statement is labeled "loop1"
   loop2:
   for (j = 0; j < 3; j++) {   //The second for statement is labeled "loop2"
      if (i == 1 && j == 1) {
         continue loop1;
      }
      console.log("i = " + i + ", j = " + j);
   }
}

// Output is:
//   "i = 0, j = 0"
//   "i = 0, j = 1"
//   "i = 0, j = 2"
//   "i = 1, j = 0"
//   "i = 2, j = 0"
//   "i = 2, j = 1"
//   "i = 2, j = 2"
// Notice how it skips both "i = 1, j = 1" and "i = 1, j = 2"

是的,我只是想问一下在 switch 语句之前的标签,谢谢! - Stefan Rein
1
不,问题中的 queryString: function() { /* some code */ } 示例与您回答中的 switch 语句前的标签示例是不等价的。问题中的示例是对象字面声明的一部分,这是完全不同的。在问题的示例中,符号 queryString 后面跟着一个冒号(“:”)是对象成员的名称,它的值是紧随其后的函数声明。 - Matthew

1

这是什么

queryString: function() {

//some code

}

意思是你可以使用queryString()来调用它所引用的函数。这种引用通常用于在JavaScript中定义一个类(或伪类;P)。像这样的东西:

var application= { namespace: {} };

application.namespace.class_name = function(){

  function constructor(){
   return {
     exposed_property1 : property1,
     exposed_property2 : property2,  
     ...
     ...
    }
   }
  //Write property/functions that you want to expose.
  // Write rest of the function that you want private as function private(){}
};

现在,在代码的任何其他部分,您都可以创建class_name的对象并使用它来访问property1、property2等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接