Синтаксис Javascript "a = объект, объект" - PullRequest
2 голосов
/ 24 января 2009

Вчера я нашел эту функцию:

function clone(obj) {
    return typeof obj === 'undefined' ?
        this : (clone.prototype = Object(obj), new clone);
}

Я думал, что много видел в Javascript, но этот синтаксис мне неизвестен:

 clone.prototype = Object(obj), new clone

Может кто-нибудь объяснить мне, как это читать? Можете ли вы дать мне ссылку на правильное определение? Я не смог найти его в MDC Mozilla, и не знаю, как найти это в Интернете, но это первый раз, когда я увидел этот синтаксис. Спасибо за усилия здесь.

Окончательное решение:

Я провел некоторое тестирование в соответствии с ответами здесь и нашел то, что нашел:

var b;
b=alert('test'),6;
alert(b);  // alert undefined
b=5,alert('test2');
alert(b);  // alert 5

Благодаря исследованию Кристофа мы нашли больше:

var a, b, c;
a = 1, 2;   // a is 1
(b = 1), 2; // b is 1 - same as above!
c = (1, 2); // c is 2

Ааа, и я также проверил его на IE6, и он работает, так что это должен быть очень старый синтаксис, а информации об этом нет? :( Странно ...

Вы оба, ребята, дали хорошее решение, спасибо за решение здесь!

Ответы [ 2 ]

7 голосов
/ 24 января 2009

Оператор запятой в MDC :

Оператор запятой (,) просто оценивает оба своих операнда и возвращает значение второго операнд.

В этом случае это работает как вызов этой функции:

function() {
   clone.prototype = Object(obj);
   return new clone;
}
3 голосов
/ 24 января 2009

Ваше «окончательное решение» дает неожиданные результаты из-за приоритета оператора. Следующий пример может помочь прояснить проблему:

var a, b, c;
a = 1, 2;   // a is 1
(b = 1), 2; // b is 1 - same as above!
c = (1, 2); // c is 2

Также обратите внимание, что

var a = 1, 2;

выдает синтаксическую ошибку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...