Can';我似乎不理解这个javascript代码!如果(!this.class)
这里是javascript的新手 因此,我一直在尝试学习使用Raphael.js,并遇到了这段代码 现在如果你看第167行,有一个“如果”语句我不明白Can';我似乎不理解这个javascript代码!如果(!this.class),javascript,Javascript,这里是javascript的新手 因此,我一直在尝试学习使用Raphael.js,并遇到了这段代码 现在如果你看第167行,有一个“如果”语句我不明白 Raphael.el.style = function (state, style, aniOptions) { if (!this.class) { this.class = style ? style : 'default'; this.aniOptions = aniOpti
Raphael.el.style = function (state, style, aniOptions)
{
if (!this.class)
{
this.class = style ? style : 'default';
this.aniOptions = aniOptions ? aniOptions : null;
// start assigning some basic behaviors
this.mouseover(function () { this.style('hover'); });
....
什么课?它返回什么?谁在退呢
它到底在检查什么?它是否是一个类?它检查属性
类
是否已定义,如果未定义,则将其指定给样式?style:“default”
您看到的只是一个条件语句,将其视为一个缩写的if-else子句,它检查style
的计算结果是真是假,如果是真的这个类将具有style
的值,如果不是,它将获得的“default”值
我不知道raphael.js是如何工作的,但在我看来它只是一个html元素类。从中,raphael.el
是一种将自己的方法添加到raphael.element
类的方法。一般来说,此类的目的是使操作SVG元素更容易
代码示例中的this.class
和前面句子中使用的编程意义上的单词class无关。就我所见,它也不是标准拉斐尔框架的一部分。它也不是指HTML和SVG元素可以具有的class
属性,通常在javascript中使用element.className
或element.setAttribute('class','…')
访问该属性
此
引用元素包装器对象(Raphael.element的实例),并且似乎编写此方法的人只是使用名称类
在元素包装器中存储了一些附加信息。(正如评论中指出的,这可能是一个坏主意,因为class
在javascript中是一个保留关键字;但无论如何,它是有效的。)
具体地说,在本例中,this.class
最初是未定义的
,因为它在Raphael或代码中的任何其他地方都没有被赋值。在if
子句中,!未定义的
计算结果为真
,在下一行中,没有向样式
的函数传递任何值,因此样式?样式:“默认值”
计算结果为“默认值”。因此this.class
被赋值为“default”。然后,如果右键单击某个形状并选择“使用自定义样式”,则该形状的类将变为“自定义”
请注意,javascript非常容易让您引用未在任何地方初始化的对象的属性,并为其赋值。如果没有赋值,它不会抛出错误,只会返回undefined
您可以通过在浏览器控制台中插入一行日志来查看所有这些内容:
console.log('style', state, style, aniOptions, this, 'class:', this.class);
然后使用浏览器的开发人员工具查看输出()。“您也可以将其编写为”-如果(!this.class)
,则它不是100%等同于。我会从答案中删除它。在if
语句的正上方,键入console.log(this)代码>并激活浏览器控制台。然后重新运行JSFIDLE来查看对象。我不会在JavaScript中使用class
作为属性名,以避免在将来的ECMAScript版本中出现混淆。它只是检查this
的class
属性是否有(falsy)值。如果您不熟悉对象,请查看。再次检查this.class的计算结果是否为false。。。嗯,没有?它检查style
是虚假的还是真实的。它将结果分配给这个.class
。总的来说,它是这样的:“如果这个.class
没有值,如果它有值,就为它指定样式
,否则“默认”
,然后做一些其他事情。”@FelixKling感谢你指出了我答案中的非常糟糕的部分。@hellokc很高兴它有帮助。。。请随意接受这个答案,除非你坚持要更多的答案。