{}和function(){}之间的区别

时间:2012-05-14 21:17:24

标签: javascript

我认为这些是等价的。

var __Panel = {
 this.header = null;
};

var __Panel = function() {
 this.header = null;
};

第一个为this提供编译器错误“预期标识符或字符串”,为;提供“预期','”。

有人可以为我澄清这一点吗?

2 个答案:

答案 0 :(得分:9)

{}用于定义对象,function(){}用于定义函数。

{}内部的Thos正文必须是一系列以逗号分隔的key: value对,如下所示:

var man = {
  age: 24,
  height: 6,
  occupation: "programmer"
};

您的示例无效,原因有三个。首先,this.header不是有效密钥,因为它包含一个点,:而不是=是用于将键与值分开的标记,而,代替使用; {{1}}分隔键值对。

答案 1 :(得分:1)

这个对我很有意思:

js> var p = { this.header = null; };
js: "<stdin>", line 11: invalid property id
js: var p = { this.header = null; };
js: ..............^
js: "<stdin>", line 11: syntax error
js: var p = { this.header = null; };
js: ..............................^

对此的详尽解释如下:

建议答案的是犀牛:this.header文本将被解释为属性id,而作为属性id,它无效。因此,您了解到{ }是一个“包含”属性的对象,属性名称看起来不像this.header。你可以进一步检查“对象”的语法;它看起来简单为{ propertyId1 : value1, propertyId2 : value2, ...}

js> var p = { header:0, doit: function(){this.header=null;} };

这是可以接受的,事实上“对象语法”是受到尊重的;我们定义了一个对象,它有两个属性,header持有整数0,而doit持有一个函数。

现在你可以想知道为什么{this.header=null;}被接受了;因为你不必混淆一个对象的语法和{}的用法来“划分”代码的“块”,在这种情况下“包含”函数本身及其代码。那些{}并不代表“裸”{}所表示的相同内容,而function()之前存在js> p.header; 0 就可以清楚地表明这一点。

header

这表明属性js> p.doit(); 保持0,这是一个简单明显的事实。

doit

这将执行属性this中保存的功能。我们期待它发生什么?这个问题源于询问js> p.header; null 是什么。

header

当我们再次检查属性this的内容时,我们看到它被修改为null。这意味着属性doit中函数中的js> var p = { this.header = null; }; js: "<stdin>", line 11: invalid property id js: var p = { this.header = null; }; js: ..............^ js: "<stdin>", line 11: syntax error js: var p = { this.header = null; }; js: ..............................^ js> var p = { header:0, doit: function(){this.header=null;} }; js> p.header; 0 js> p.doit(); js> p.header; null 引用了“包含”属性的对象,即对象p本身。

原始的,已删除的社区维基帖

这个对我很有意思:

{{1}}

原帖的结尾

所有这些都可能以不同的方式回答这个问题,通过一条道路,一种默契和隐含的方式,社区维基模式可以通过更多的“谈话例子”(通过实践学习和解释错误技术)帮助成长)。

但它没有被“抓住”,并且添加了明确的“演绎”步骤。