我一直在查看一些库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;
是什么意思?
答案 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
那样。