我正在使用Javascript Object Literal学习,我还在Chrome的Javascript控制台中对此javascript进行了测试,并返回Uncaught SyntaxError: Unexpected Identifier
工作代码
"use strict";
var myObject = {
foo: 'bar',
talk : function(){
console.log('Hello world')
}
}
myObject.talk();
console.log(myObject.foo);
但如果我改为function talk(){}
"use strict";
var myObject = {
foo: 'bar',
function talk(){
console.log('Hello world')
}
}
myObject.talk();
console.log(myObject.foo);
抛出错误Uncaught SyntaxError: Unexpected Identifier
。提前谢谢。
答案 0 :(得分:1)
对象文字不像构造函数那样工作。
就像lante说的那样,你必须设置一个标识符并为其赋值(或函数)以使其工作。它基本上就像一个带键/值对的数组。
构造函数的代码(作为另一种方法):
function myObject() {
this.foo = 'bar';
this.talk = function() {
alert('talk fired');
}
}
var obj = new myObject();
obj.talk();
构造函数和对象文字之间的区别是:构造函数可以具有私有函数和属性,其中文字总是公共访问(除了使用内部函数)。 this.talk()
是一个可以在外部调用的公共函数。如果您输入function talk()
而不是this.talk
,那么它是私有的,无法通过obj.talk();
答案 1 :(得分:0)
这是为函数指定函数的正确语法:
var myObject = {
foo: 'bar',
talk: function thisNameIsOptional() {
console.log('Hello world')
}
};
你也可以这样做:
var myObject = {
foo: 'bar',
talk: talk
};
function talk() {
console.log('Hello world')
}
如您所见,语法始终相同:
{
literal1: (object or function),
literal2: (object or function)
... and so on ...
}
你问题的第二个错误。
如果这还不够,你有a complete guide for variables and literals on MDN。
答案 2 :(得分:0)
示例在这里: http://www.w3schools.com/js/js_objects.asp
当您使用javascript(一种方式)创建对象时,您将创建一个对象字典。执行此操作的方法是分配:
{
objectName: objectValue (value or function),
...
}
在你的第二个例子中,你犯了2个错误(这就是为什么它不能编译): - 您可以在其他函数(范围)中定义命名函数,但是对象声明不是其中之一 - 您需要将此函数分配给名称,该名称将是此对象中指向它的指针
这就是为什么你的第一个选项是正确的,而第二个选项不是。