Подтвердить что ты не робот

Синтаксис Javascript "a = объект, объект"

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

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

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

 clone.prototype = Object(obj), new clone

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

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

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

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

Благодаря исследованиям christoph мы нашли больше:

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

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

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

4b9b3361

Ответ 1

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

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;

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

Ответ 2

Comma operator в MDC:

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

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

function() {
   clone.prototype = Object(obj);
   return new clone;
}