Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Улучшить код (https://javascript.ru/forum/dom-window/52022-uluchshit-kod.html)

OlegALL 01.12.2014 23:03

$.call({$:1})
- в смысле если $ примет значение 1, то не сработает?

danik.js 01.12.2014 23:21

Запусти да посмотри.

OlegALL 02.12.2014 00:18

но ведь
this.$
вызывает $ без явного указания this, причём тут это
$.call({$:1})
?

danik.js 02.12.2014 06:00

Немного ошибся. Тестируем твою проверку вот так:

function $(selector) {
	if (this.$) {
		alert('Вызван не как конструктор');
		//return new $(selector);
	} else {
		alert('Вызван как конструктор');
	}
}
$('x'); // ок
$.call({}, 'x'); // фэйл



(function(window, document) {
	function $(selector) {
		if (this.$) {
			alert('Вызван не как конструктор');
			return new $(selector);
		} else {
			alert('Вызван как конструктор');
		}
	}
	$('x'); // фэйл
})(window, document);


Чет уж слишком легко ее наебать.

OlegALL 02.12.2014 09:15

ты хотел подчеркнуть, что this.$ зависит от внешнего окружения?
можешь объяснить, почему
(function(window, document) {
		function $(selector) {
                     if (this.$){}   // this.$ = undefined ???, хотя this = Window
                }
}



function $(selector) {
     if (this.$){}   // this.$ = тело функции $; this = Window
}


и что это за функция-обёртка?
(function(window, document) {
})(window, document);
- извини, что надоел с вопросами, уже нет времени исследовать

ruslan_mart 02.12.2014 10:54

if(this === window) {
   return new $(....);
}

OlegALL 02.12.2014 11:02

if(this === window)

и что? в обоих случаях
this === window
это true

ruslan_mart 02.12.2014 11:15

OlegALL, нет.

var $ = function(selector) {
    alert(this === window);
    if(this === window) return new $(selector);
}
      
$('bla');

OlegALL 02.12.2014 11:45

уже совсем ничего не понимаю

скажите, вот это
(function(window, document) {
})(window, document);
- создаётся для задания области видимости (замыкания)?

danik.js 02.12.2014 14:29

Ruslan_xDD, а если this - не window будет, то конструктор так и не будет вызван? Тоже проверка корявая. Че выдумывать то, а? Все уже придумано до нас.


Часовой пояс GMT +3, время: 17:09.