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