Немного ошибся. Тестируем твою проверку вот так:
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);
Чет уж слишком легко ее наебать.