Javascript {}和函数(){}之间的差异
我认为这些是等价的Javascript {}和函数(){}之间的差异,javascript,Javascript,我认为这些是等价的 var __Panel = { this.header = null; }; var __Panel = function() { this.header = null; }; 第一个错误为this提供了一个编译器错误“Expected identifier or string”,为提供了“Expected','” 有人能帮我澄清一下吗?{}用于定义对象,而function(){}用于定义函数 {}中的主体必须是一系列逗号分隔的键:值对,如下所示: var man =
var __Panel = {
this.header = null;
};
var __Panel = function() {
this.header = null;
};
第一个错误为this
提供了一个编译器错误“Expected identifier or string”,为提供了“Expected','”代码>
有人能帮我澄清一下吗?{}
用于定义对象,而function(){}
用于定义函数
{}
中的主体必须是一系列逗号分隔的键:值对,如下所示:
var man = {
age: 24,
height: 6,
occupation: "programmer"
};
你的例子不起作用有三个原因。首先,this.header
不是有效的键,因为它包含一个点,:
而不是=
是用于将键与值分开的标记,,
被用来代替代码>用于分隔键值对。我对这一点很感兴趣:
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 = { 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
这是可以接受的,事实上“对象语法”是受尊重的;我们定义了一个具有两个属性的对象,header
包含整数0,而doit
包含函数
现在您可能想知道为什么会接受{this.header=null;}
;这是因为您不必将对象的语法与使用{}
来“分隔”代码的“块”相混淆,在这种情况下,“包含”函数本身及其代码。那些{}
并不代表“裸的”{}
所代表的同一事物,前面有函数()
就清楚地表明了这一点
js> p.header;
0
这表明属性header
包含0,这是一个显而易见的事实
js> p.doit();
这将执行属性doit
中保存的函数。我们期望它发生什么?。这个问题源于问这是什么
js> p.header;
null
当我们再次检查属性头的内容时,我们看到它被修改为null。这意味着This
在属性doit
中的函数中指的是“包含”属性的对象,即对象p本身
原始、已删除的社区维基帖子是:
我对这个很感兴趣:
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 = { 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
js>var p={this.header=null;};
js:,第11行:无效的属性id
js:var p={this.header=null;};
js:^
js:,第11行:语法错误
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;
无效的
原始帖子的结尾
所有这些都以不同的方式回答了这个问题,通过一条路径,以一种默契和含蓄的方式,社区维基模式本可以通过更多的“对话示例”(一种通过实践学习和解释错误的技术)帮助成长
但它并没有被“捕获”,而是加入了明确的“演绎”步骤。对;它们甚至不接近相等。我认为需要注意的是,它们可能正在使用_面板创建_面板的实例。例如:var myPanel=new\uu Panel()
。关键字this
在第二种情况下实际上意味着什么,但不是第一种情况。此外,{}
创建一个对象实例,在创建实例之前,需要使用new
调用设置为function(){}
的任何变量
其中\u面板
是一个对象(而不是一个函数),将生成错误。语法是无效的。@lbstr-正是我失败的地方。我想你应该花更多的时间来学习。对象文字语法与函数语法根本不相关。你为什么认为它们是等价的?!?有没有任何书籍或网页在流通中这样说?@FelixKling-我正在用javascript实现一个工厂设计模式,在这里用一种更一般的方式定义我的对象,结果有点绕圈子。我以前用过这两种定义,但我想我今天就要离开了。公平地说,涉及符号的问题有点难以回答search@FelixKling-我正在阅读MDN链接,非常好!谢谢这是如何回答这个问题的?如果您可以详细说明为什么“这很有趣”,那么请标记取消删除。