Синтаксис 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, и он работает, так что это должен быть действительно старый синтаксис, и нет никакой информации об этом?:( Странно...
Оба из вас, ребята, дали хорошее решение, спасибо за решение здесь!
Ответы
Ответ 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;
}