2015-12-10 3 views
-2

Вот пример функции конструктор, который выбрасывает "SyntaxError: missing ; before statement Line 3"Использование «:» (двоеточие) оператор вместо «=» равно бросает ошибки

function party() { 
    this.cakes = "Truffle Cake", 
    this.cookies = "Good Day", 
    this.drinks: "Wine"; 
    } 

Хотя это не

function party() { 
    this.cakes = "Truffle Cake", 
    this.cookies = "Good Day", 
    this.drinks = "Wine"; 
    } 

Отличие от сначала во втором - использование равенства для оператора (=) вместо оператора (:)) для присвоения значению drinks. Я хотел бы знать логику, почему Javascript выдает ошибку в первом случае.

Кроме того, почему в следующих party.cake и т.д. предупреждения с «Undefined», как партия является объектом самого по себе

function party() { 
    cake = "Truffle Cake"; 
    cookies = "Good Day"; 
    drinks = "Wine"; 
    } 

    alert("Cakes in Tonight's Party: " + party.cake); 
    alert("Cookies in Tonight's Party: " + party.cookies); 
    alert("Drinks in Tonight's Party: " + party.drinks); 

Благодаря

+0

Возможно, вы захотите прочитать [MDN Работа с объектами] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects) - он кратко описывает основы, но я думаю, что должно быть достаточно, чтобы показать вам, где вы поступили не так. –

+0

Логика заключается в том, что язык по своей природе имеет синтаксис, а первый - недопустимый синтаксис. Почему * должен * работать? –

+0

Что касается последнего кода, снова почему * не должен * он дает вам 'undefined'? Прочитали ли вы учебник по JavaScript, в котором говорится, что выполнение назначений внутри функции добавит свойства к этой функции? –

ответ

1

Двоеточие используется, чтобы отделить свойство от значения в объект литерал. Уравнение отделяет свойство/переменную от значения, которое устанавливается.

Сообщение об ошибке правильное, вам нужно равное, потому что вы устанавливаете свойство. Это не объект буквальный.

+0

1st - это функция-конструктор, а конструктор - это объект, реализующий внутренние методы [[call]] и [[construct]]. Более того, если я употребляю: «Wine»; '(удаление этого оператора) в первом примере, синтаксическая ошибка не появляется. Как бы вы это объяснили? –

+0

Это потому, что в этом случае 'drink:' считается [label] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label). Я не понимаю, к чему вы пытаетесь получить свой первый оператор, было довольно ясно, что это конструктор –