奇怪的javascript符号-带冒号的变量声明?

奇怪的javascript符号-带冒号的变量声明?,javascript,Javascript,我查阅了一些库javascript源代码,发现了一条我完全不理解的语句。该库基于dojo,并使用其“类继承”的实现。以下是主题代码的简化版本: dojo.declare(“myCustomClass”{ 构造函数:函数(){ //这句话是什么意思? isContentShowing:假; //下面是一些在回调中使用isContentShowing的代码 connect(这个“fakeEvent”,这个,函数(){ if(this.isContentShowing){ //做点什么 } //多做

我查阅了一些库javascript源代码,发现了一条我完全不理解的语句。该库基于dojo,并使用其“类继承”的实现。以下是主题代码的简化版本:

dojo.declare(“myCustomClass”{
构造函数:函数(){
//这句话是什么意思?
isContentShowing:假;
//下面是一些在回调中使用isContentShowing的代码
connect(这个“fakeEvent”,这个,函数(){
if(this.isContentShowing){
//做点什么
}
//多做事
});
}
});

所以问题是,
isContentShowing:false函数体内部的意思?

它不是一个变量。这是一个:

提供具有标识符的语句,您可以使用break或continue语句引用该标识符

在这种情况下,它是无用的:它不被用作标签,它不执行赋值,并且计算
false
的结果被丢弃

我怀疑
=
是需要的,因为
此.isContentShowing=false
在以下条件下更有意义。也许最初的作者从来没有遇到/意识到这个错误,因为
这个.isContentShowing
评估为
未定义的
(因此仍然是错误的,比如,
false

或者,正如Chris在评论中所说,其意图可能是:

dojo.declare("myCustomClass", {
  isContentShowing : false, // but , and not ;
  constructor:...
});

这在Javascript中称为对象文字。它包含键值对,例如:

var car = {
    color: 'blue',
    price: 10000
}
因此,当您调用
car['color']或car.color
时,它将返回
blue
。在我的示例中,颜色是键,值是“蓝色”。这就是所谓的键值对


无论如何,在您的示例中,
this.isContentShowing
默认情况下将返回false。

因此它看起来像是一个放错位置的语句(解释为标签,如@pst所解释)该属性应该是
构造函数的对等属性:
传递给
dojo.declare的对象上的所有属性都放在对象原型上。因为一个未定义的值是错误的,所以最终,行为基本相同。在原型上声明虚假属性的价值是有限的,除非有人确实在迭代属性以检查是否存在,就像dojo.parse所做的那样。

如果这是字面上的代码,那就是语法错误。@ChrisMorgan这不是。我认为pst解释得很好。现在每个人都会忘记标签…@MaxArt:hmm。。。我以为JavaScript不支持它们。我知道它们(并且在添加评论之前考虑过!),但我认为它们不是用JavaScript编写的。我被纠正了。非常混乱。为什么把
放错就在那之后?我猜这是某种bug…@MaxArt它令人困惑-我相信它确实是不正确的代码。@MaxArt-是的,它是一个bug,但正如pst解释的,它不是语法错误。原始编码者最有可能打算
this.isContentShowing=false
。或者可能是
isContentShowing:false,
在函数外部(在对象文本内部)。@ChrisMorgan这很可能是目的,尽管是
必须是对象文本中的
。。。但无论如何,对于[被误导的]现象的解释和我的一样好:-)在你的回答中,你展示了一个对象文字。在这个问题中,代码定义的是函数,而不是对象文字。在上下文中,很明显,原始编码者的意思是
this.isContentShowing=false。在问题
中,此.isContentShowing
将返回
未定义的
,而不是
(尽管在if条件下
未定义的
将与
的作用相同)。