var abc=(function(){
var self=this;
return {
self:self
}
})();
При выполнении я получаю undefined
, что делает this
случиться, что в этом контексте.Что «это» означает в этом откровенном шаблон модуля
var abc=(function(){
var self=this;
return {
self:self
}
})();
При выполнении я получаю undefined
, что делает this
случиться, что в этом контексте.Что «это» означает в этом откровенном шаблон модуля
То, что вы можете быть упрощены с целью объяснения в
(function(){ console.log(this) })();
Ваше выражение (в первом наборе скобок) определяет функцию. Затем вы вызываете эту функцию без контекста (this
). Эта конструкция называется IIFE. Как вы не сдадите контекст, поведение зависит от того, что называется в strict mode или нет:
В не строгом режиме будет иметь глобальный объект (window
в браузере, global
в узле).
В строгом режиме недостающий контекст вызова функции не заменен, это undefined
.
Как вы undefined
, я думаю, вы в strict mode. Вероятно, у вас есть "use strict";
в начале файла или в закрывающей функции.
Если вы хотите, чтобы передать контекст, вы можете, например, сделали
(function(){ console.log(this) }).call(someobject);
Да, я был в строгом режиме. Но я не смог понять статут. «В строгом режиме недостающий контекст вызова функции не заменяется». –
@Sureshkumar Я отредактировал. Теперь понятно? –
Да, благодарность дистрофии –
this
относится к текущему объекту. В вашем состоянии this
будет window
, и, как вы пытаетесь получить значение , вам нужно использовать так:
this.self = this;
Теперь только вы можете получить значение:
var xyz = new abc();
xyz.self
Но обратите внимание, что вы не можете использовать abc как конструктор, такой как приведенный выше код, потому что вы используете закрытие.
в том, что "корень сферы" this
является window
и
console.log(abc.self);
результаты для меня в
Window {top: Window, window: Window, ...}
'abc.self' прекрасно работает для меня, и' this' является глобальным масштабом, как IIFE не имеют специальный scope- – adeneo
Когда я делаю 'abc.self', я получаю объект' window'. – Barmar