> $ = function() {
> this.name = "levi";
>
> return this; };
>
> console.log($());
Мы получаем DOMWindow вместо $
Когда вы вызываете $ в качестве функции, тогда его ключевое слово this устанавливается на глобальный объект, как это было бы для любой функции, вызываемой подобным образом.
из-за причудливой природы этого
в JavaScript
Javascript это ключевое слово работает так, как указано для работы. Он отличается от других языков, но именно так он и работает.
Что для меня более странно,
console.log ($ (). name) правильно возвращает
"Levi".
Когда вы вызываете $ как функцию, ее ключевое слово this является глобальным объектом, поэтому:
this.name = 'levi';
создает свойство глобального объекта с именем name со значением 'levi'. Не странно, когда знаешь, что происходит. : -)
Мы могли бы просто добавить новый console.log (новый
$ ()) и все работает.
Именно так конструкторы должны вызываться в javascript. Когда функция вызывается с new , ее ключевое слово this устанавливается на вновь созданный объект, поэтому this.name
создаст новое свойство этого объекта. Кстати, return this
является избыточным, конструкторы возвращают это по умолчанию.
> $ = function() {
> var obj = function() {
> this.name = "levi";
> };
>
> return new obj(); };
console.log ($ ()); Что дает мне что
Я хочу, но это кажется немного ненужным
обернуть объект внутри
функция, которая создает его. В дальнейшем
более того, он имеет тип obj, а не типа $
Предположительно, вы используете typeof , который может возвращать только одно из значений, указанных в ECMA-262. Этот короткий список (который включает в себя объект, число, строку и т. Д.) Не включает $ .
Какими еще способами это может быть
сделано?
Вы можете использовать подход, который вы уже обнаружили, клон Лассе Рейхштейна Нильсена (также популяризированный Дубласом Крокфордом как «порождать») и шаблон модуля Ричарда Корнфорда. Используйте Google, есть много, много сообщений обо всем вышеперечисленном.