奇怪的JavaScript表示法 - 带冒号的变量声明?

时间:2012-06-04 07:29:43

标签: javascript

我一直在查看一些库javascript源代码,我发现了一个我完全不理解的声明。该库基于 dojo 并使用其“类继承”的实现。以下是作为主题的代码的简化版本:

dojo.declare("myCustomClass", {
    constructor:function(){
        // what does this statement mean?
        isContentShowing : false;

        //here some code that uses isContentShowing in callbacks
        dojo.connect(this, "fakeEvent", this, function(){
            if(this.isContentShowing){
            //do some stuff
            }
            //do more stuff
        });
    }
});

所以问题是函数体内isContentShowing: false;是什么意思?

3 个答案:

答案 0 :(得分:7)

这不是变数。这是label

  

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

在这种情况下,它是无用的:它不用作标签,执行赋值,以及评估false的结果被丢弃了。

我怀疑需要= this,因为this.isContentShowing = false在下面的条件下更有意义。也许最初的作者从未遇到/意识到这个错误,因为this.isContentShowing后来评估undefined(因此仍然是假的,好吧,false)。

或者,正如克里斯在评论中所说,意图可能是:

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

答案 1 :(得分:-1)

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

var car = {
    color: 'blue',
    price: 10000
}

所以当你致电car['color'] or car.color时,它会返回blue。在我的例子中,颜色是关键,值是“蓝色”。这就是所谓的键值对。

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

答案 2 :(得分:-1)

所以它看起来像一个错位的语句(解释为标签,如@pst所解释的)该属性应该是constructor:的对等体传递给dojo.declare的对象的所有属性都是放上Object原型。因为未定义的值是假的,所以最终行为几乎相同。在原型上声明falsey属性的价值有限,除非有人实际迭代通过属性来检查是否存在,如dojo.parse那样。