我认为这些是等价的。
var __Panel = {
this.header = null;
};
var __Panel = function() {
this.header = null;
};
第一个为this
提供编译器错误“预期标识符或字符串”,为;
提供“预期','”。
有人可以为我澄清这一点吗?
答案 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}}
原帖的结尾
所有这些都可能以不同的方式回答这个问题,通过一条道路,一种默契和隐含的方式,社区维基模式可以通过更多的“谈话例子”(通过实践学习和解释错误技术)帮助成长)。
但它没有被“抓住”,并且添加了明确的“演绎”步骤。