2

我一直在查看一些库 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;内部函数体是什么意思呢?

4

3 回答 3

7

它不是一个变量。这是一个标签

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

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

考虑到下面的条件,我怀疑 a= this被期望this.isContentShowing = false更有意义。也许原作者由于后来this.isContentShowing评估undefined(因此仍然是错误的,比如,好吧,false)而从未遇到/意识到这个错误。

或者,正如 Chris 在评论中建议的那样,意图可能是:

dojo.declare("myCustomClass", {
  isContentShowing : false, // but , and not ;
  constructor:...
});
于 2012-06-04T07:31:53.490 回答
-1

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

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

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

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

于 2012-06-04T07:37:33.960 回答
-1

所以它看起来像是一个放错地方的语句(被解释为标签,正如@pst 所解释的那样)该属性很可能是constructor: 传递给的对象上的所有属性的对等点,这些属性dojo.declare都放在对象原型上。因为未定义的值是错误的,所以最终的行为几乎相同。在原型上声明虚假属性的价值是有限的,除非有人真的像这样迭代属性来检查是否存在dojo.parse

于 2012-06-04T16:14:38.057 回答