Uncaught SyntaxError:Object Literal中的意外标识符

时间:2015-01-07 18:23:27

标签: javascript jquery html css

我正在使用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。提前谢谢。

3 个答案:

答案 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个错误(这就是为什么它不能编译): - 您可以在其他函数(范围)中定义命名函数,但是对象声明不是其中之一 - 您需要将此函数分配给名称,该名称将是此对象中指向它的指针

这就是为什么你的第一个选项是正确的,而第二个选项不是。