Оператор запятая. Не возбраняется?
Короче, можно так писать?
this.getElement = function() { return this.$element || (this.$init(), this.$element); }; Этот же код в традиционном стиле: this.getElement = function() { if (!this.$element) this.$init(); return this.$element; }; Какой вариант лучше и нет ли проблем с запятой (где-то видел запятую как хак для установки scope чтоли (для eval'а в каком-то браузере) - так и не допер что делает эта запятая)? |
И еще такой вариант:
function Bla() { this.getElement = function() { this.$init(); delete this.getElement; return this.getElement(); }; } (function(){ this.$init = function() { this.$element = document.createElement("div"); }; this.getElement = function() { return this.$element; }; }).call(Bla.prototype); Насколько он оправдан? |
Если сжимать код, могут быть проблемы. По крайней мере в 1 и 2 случае.
|
и вообще это ужасный стиль и не очевидный, никогда так не делай
Gozar, кот, как тебе мой новый FRP стайл? Все что объявлено без var попадает в $scope. Все что приравнивается в скобочках воспринимается как ячейка. Круто? ![]() |
Цитата:
Мне нравится. Неуж-то так плохо? Третий вариант нигде не встречал. Но помоему логичный, но смотрится жутко, особенно delete. Maxmaxmaximus3, убейся, пожалуйста. |
Цитата:
|
Цитата:
Цитата:
alert(function() { return 0 || ('a', 'b'); }()); alert(function() { return 1 || ('a', 'b'); }()); Очевидно что нет. Цитата:
this.$element || this.$init() |
Цитата:
тут же ведь используют вот это alert((1,2,3,4,5)); Вопрос только в целесообразности этого... ;) Цитата:
|
Цитата:
function bar() {console.log('foo'); return 'foo';} function foo() {console.log('bar'); return 'bar';} var x = (bar(), foo()); alert(x); |
Цитата:
|
Цитата:
|
Цитата:
Много в каких языках могут применяться конструкции ну ооочень особенные! Во только оправдывает их повсеместное использование. Т.о. даже новички, не понимая их смысл, но зная "конечное" назначение применяют их правильно и к месту... :) Может так будет и с запятой? Если начать ее применять всем поголовно для неких стандартных ситуаций... :D |
Цитата:
Это-то в купе и начинают использовать. Т.е. выполнить последовательность выражений и вернуть результат последнего... |
Например вот это
function test(Val) { Val=Val||1; }; Считается "стандартной" обработкой параметров функции, дабы придать им значение "по умолчанию"... А это <элемент>=<проверка_на_существование_элемента>||(<инициализация_элемента>,<элемент_по_умолчанию>); кагбе "расширение" первой конструкции. :) |
Цитата:
http://stackoverflow.com/questions/9...-in-javascript Кажется теперь понял тот трюк. Цитата:
Суть в том, что изначально this.$element = null, и создаться он должен только при первом обращении к нему. Для этого нужно вызвать метод this.$init(). Причем $init() не должен ничего возвращать. Есть идеи реализовать это иначе? |
Цитата:
По-мне так можно эту конструкцию просто добавить в "методическую копилочку" и просто использовать, показывая как можно большему количеству людей. Так она будет обще понятна... |
Цитата:
if (!this.$element) { this.$init(); } return this.$element; |
Цитата:
|
Цитата:
|
Обычно так пишу, понятно и жмется
if (!this.$element) { this.$init(); } return this.$element; так реже, ибо немножко путает) return this.$element || this.$div; |
Законтрибьютил свой код. Сказали лучше исправить. Предложили нарушить это условие (это условие вобще придумал я):
Цитата:
|
Цитата:
!this.$element && this.$init(); |
Часовой пояс GMT +3, время: 14:45. |