$.call({$:1})- в смысле если $ примет значение 1, то не сработает? |
Запусти да посмотри.
|
но ведь
this.$вызывает $ без явного указания this, причём тут это $.call({$:1})? |
Немного ошибся. Тестируем твою проверку вот так:
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); Чет уж слишком легко ее наебать. |
ты хотел подчеркнуть, что this.$ зависит от внешнего окружения?
можешь объяснить, почему (function(window, document) { function $(selector) { if (this.$){} // this.$ = undefined ???, хотя this = Window } } function $(selector) { if (this.$){} // this.$ = тело функции $; this = Window } и что это за функция-обёртка? (function(window, document) { })(window, document);- извини, что надоел с вопросами, уже нет времени исследовать |
if(this === window) { return new $(....); } |
if(this === window) и что? в обоих случаях this === windowэто true |
OlegALL, нет.
var $ = function(selector) { alert(this === window); if(this === window) return new $(selector); } $('bla'); |
уже совсем ничего не понимаю
скажите, вот это (function(window, document) { })(window, document);- создаётся для задания области видимости (замыкания)? |
Ruslan_xDD, а если this - не window будет, то конструктор так и не будет вызван? Тоже проверка корявая. Че выдумывать то, а? Все уже придумано до нас.
|
Часовой пояс GMT +3, время: 17:09. |