У меня есть модуль ...Почему ссылка на «this» возвращает значение, оно должно быть неопределенным?
var myModule = (function(){
var obj = new Object();
obj.name = "";
obj.sayName = function(){
obj.name = "jon";
console.log(obj.name);
console.log(this.name);
}
return obj;
})()
myModule.sayName();
Это печатает слово «джон» дважды в соответствии с console.log заявления.
Однако я не понимаю, почему «это» правильно, так как оно вернет ссылку на функцию и будет «неопределенным», не так ли?
'' '' 'obj', потому что' obj' является 'myModule', и вы вызываете функцию как' myModule.sayName() ', обратите внимание на точку. – elclanrs
Но я думал, потому что это новая функция, которую он получит, это собственное закрытие? – Exitos
Это не имеет никакого отношения к закрытию или сфере видимости, а скорее к тому, как это работает в javascript. В основном, если вызывается как 'a.b.c()' 'this' в' c', ссылается на фамилию перед последней точкой - 'b'. Таким образом, в вашем случае имя до последней точки - 'myModule'. См. Этот ответ для получения дополнительной информации: http://stackoverflow.com/questions/13441307/how-does-the-this-keyword-in-javascript-act-within-an-object-literal/13441628#13441628 – slebetman