В обоих случаях проверяется, имеют ли параметры a и b в конструкторе «истинное» значение.Это означает, что в обоих случаях, если вы передаете, скажем, 0 или пустую строку, или (очевидно) ложь, то это значение будет отброшено.Разница в том, что первый случай не создает свойство объекта, а во втором - значение по умолчанию, равное нулю.
В любом случае вам все равно придется проверять свойство, когда вы фактически используете его в doSomething()
, и ваш if (this.a)
тест будет работать независимо от того, было ли свойство установлено, равно нулю или явно задано неопределенным.
Если вы не хотите возвращать ошибку, еслизначения не указаны. Я бы хотел просто установить их напрямую:
var myClass = function(a, b)
{
this.a = a;
this.b = b;
}
Если значение не указано в параметре, свойство будет создано, но будет установлено значение undefined, которое все равно будет работатьточно так же, как в вашем тесте в doSomething()
, но вы бы сохраняли if или ||тест с дополнительным преимуществом не выбрасывать 0, пустую строку или ложные значения.Таким образом, конструктор выглядит лучше ...
Что касается фактического сравнения производительности, то вам действительно нужно настроить надлежащий тест (например, на jsperf.com).Если бы мне пришлось угадывать, я бы сказал, что в среднем версия if(a) this.a=a;
будет быстрее, так как она выполняет задание только тогда, когда она правдива, но угадывать производительность - плохой план.Пока вы не протестируете его в разных браузерах , вы не будете знать, что один способ работает быстрее в IE, а другой - в Chrome.Если вы настроили тест, обязательно сравните его с прямым заданием, аналогичным тому, которое я показал выше.
РЕДАКТИРОВАТЬ: я только что увидел другой ответ, который обнаружил разницу в производительности на 6%.Для такой минимальной разницы и учитывая, что, как я уже упоминал выше, разница в производительности может быть обращена вспять в некоторых браузерах, я думаю, что вам лучше кодировать то, что лучше всего подходит для ваших требований к обработке, и просто не беспокоиться оспектакль.В любом случае (или все три способа, если вы включите мой ответ) ясны и просты, и они работают хорошо, они просто не делают одно и то же ...