Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript {}和函数(){}之间的差异_Javascript - Fatal编程技术网

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链接,非常好!谢谢这是如何回答这个问题的?如果您可以详细说明为什么“这很有趣”,那么请标记取消删除。