javascript代码解释

Posted

技术标签:

【中文标题】javascript代码解释【英文标题】:javascript code explanation 【发布时间】:2011-09-25 14:47:33 【问题描述】:

谁能解释一下这段代码的作用?

dojo[(show ? "remove" : "add") + "Class"](this.listNode, "tweetviewHidden");

这里是这个函数值所属的函数:

// Provide the class
dojo.provide("tweetview._ViewMixin");
 
// Declare the class
dojo.declare("tweetview._ViewMixin", null, 
    // Returns this pane's list
    getListNode: function() 
        return this.getElements("tweetviewList",this.domNode)[0];
    ,
    // Updates the list widget's state
    showListNode: function(show) 
        dojo[(show ? "remove" : "add") + "Class"](this.listNode, "tweetviewHidden");
    ,
    // Pushes data into a template - primitive
    substitute: function(template,obj) 
        return template.replace(/\$\([^\s\:\]+)(?:\:([^\s\:\]+))?\/g, function(match,key)
            return obj[key];
        );
    ,
    // Get elements by CSS class name
    getElements: function(cssClass,rootNode) 
        return (rootNode || dojo.body()).getElementsByClassName(cssClass);
    
);

来源:http://dojotoolkit.org/documentation/tutorials/1.6/mobile/tweetview/starting_tweetview

【问题讨论】:

【参考方案1】:

很简单,如果 show 为真,它将调用dojo.removeClass(this.listNode, "tweetviewHidden");,如果为假,它将调用dojo.addClass(this.listNode, "tweetviewHidden");。 本质上它是一个切换功能。

[ ] 括号打开一个对象以通过键访问值。就像var bla="foo":"bar"; bla["foo"];。现在,既然是道场,值就是一个函数,会被执行

【讨论】:

我不明白为什么这个答案被否决了。有人可能会争辩说,如果show 为真,那么它不是那么多,但如果show 是一个真值(即,不是 0、""、false、null、undefined 或 NaN)则更多,但这是一个小问题。 感谢您再次提高我的回答。 +1 为您提供有关真实价值观的信息!但是 false、""、null、undefined、0 和 NaN 当然是 false 而不是 true 值!猜你把它弄混了 :) 和 -10, 20, true, "foobar", 一个对象,一个数组,函数都是真值。 我以“不”一词开始我的列表,以暗示我的意思是除我列出的那些之外的任何值。我会争辩说我没有把它弄混,我的“不”只是错过了。 :)【参考方案2】:

稍微冗长一点,代码是这样的:

if (show)  f = dojo["removeClass"]; 
else       f = dojo["addClass"];    

f(this.listNode, "tweetviewHidden");

我想dojo 充当了可以通过[] 按名称查找的函数的容器。

【讨论】:

通过括号语法查找属性不是 Dojo,这只是 JS。【参考方案3】:

它使用[] 括号和?: 三元运算符来执行以下操作:

if(show)
    dojo.removeClass(this.listNode, "tweetviewHidden");
else
    dojo.addClass(this.listNode, "tweetviewHidden");

【讨论】:

【参考方案4】:

它通过“show”变量“切换”类。即如果“show”为真,则将该类从节点中移除,否则将其添加到节点中。

考虑使用以下快捷方式:

dojo.toggleClass(this.listNode, "tweetviewHidden", !show);

【讨论】:

以上是关于javascript代码解释的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript解释器如何解释代码?

有人可以解释以下 javascript 代码吗?

JavaScript预解释是一种毫无节操的机制

JavaScript预解释是一种毫无节操的机制

JavaScript预解释是一种毫无节操的机制

JavaScript 是如何运行的?