Javascript模块模式范围与此
我正在使用模块模式进行开发,不知道为什么我不能使用此模式访问模块范围。也许我对揭示模块模式的理解是错误的 以下是我使用的代码:Javascript模块模式范围与此,javascript,design-patterns,Javascript,Design Patterns,我正在使用模块模式进行开发,不知道为什么我不能使用此模式访问模块范围。也许我对揭示模块模式的理解是错误的 以下是我使用的代码: var BLOG = window.BLOG || {}; BLOG.Module = (function(){ var _this = this, _hasLoaded = false; function init(){ console.log(_this); // Logs the Windo
var BLOG = window.BLOG || {};
BLOG.Module = (function(){
var
_this = this,
_hasLoaded = false;
function init(){
console.log(_this); // Logs the Window object
}
function _privateMethod(){
$.ajax({
url: 'lazyload/lazyload.html',
success : function( data ){
// _hasLoaded = true; // I want to access the variable in my module, How do I refer to it?
}
});
}
return {
init : init
};
})();
这取决于函数的调用方式。如果直接调用它,而不是通过对象属性(如外部作用域函数)调用,则在该调用中,此
将是松散模式下的全局对象(严格模式下的未定义
)。在浏览器上,这是窗口对象
您通常不会使用this
来尝试引用最外层作用域函数中的内容(出于这个原因)
如果有人这样做:
BLOG.Module.init();
…然后在对init
的调用中,this
(而不是\u this
)将引用模块
,您可以引用在最外层作用域函数末尾创建的对象上的其他属性(目前没有任何其他属性,只有init
)
重新编辑:
var
_this = this,
_hasLoaded = false;
// ...
function _privateMethod(){
$.ajax({
url: 'lazyload/lazyload.html',
success : function( data ){
// _hasLoaded = true; // I want to access the variable in my module, How do I refer to it?
}
});
}
只需取消注释该行:
_hasLoaded = true;
这是因为\u privateMethod
和调用\u privateMethod
而创建的任何ajax成功处理程序都是在最外层作用域函数中定义的变量上的闭包。所以你直接引用它们
如果“结束”这个词的用法不熟悉,不要担心
旁注:这是一个奇怪的构造:
var BLOG = window.BLOG || {};
…因为它混合了要求它处于全局范围的代码和不要求它处于全局范围的代码。它完全是功能性的,只是有点奇怪。我可能会选择这样或那样的方式:
// Requires that it's at global scope (and yes, this does work)
var BLOG = BLOG || {};
或
这取决于函数的调用方式。如果直接调用它,而不是通过对象属性(如外部作用域函数)调用,则在该调用中,此
将是松散模式下的全局对象(严格模式下的未定义
)。在浏览器上,这是窗口对象
您通常不会使用this
来尝试引用最外层作用域函数中的内容(出于这个原因)
如果有人这样做:
BLOG.Module.init();
…然后在对init
的调用中,this
(而不是\u this
)将引用模块
,您可以引用在最外层作用域函数末尾创建的对象上的其他属性(目前没有任何其他属性,只有init
)
重新编辑:
var
_this = this,
_hasLoaded = false;
// ...
function _privateMethod(){
$.ajax({
url: 'lazyload/lazyload.html',
success : function( data ){
// _hasLoaded = true; // I want to access the variable in my module, How do I refer to it?
}
});
}
只需取消注释该行:
_hasLoaded = true;
这是因为\u privateMethod
和调用\u privateMethod
而创建的任何ajax成功处理程序都是在最外层作用域函数中定义的变量上的闭包。所以你直接引用它们
如果“结束”这个词的用法不熟悉,不要担心
旁注:这是一个奇怪的构造:
var BLOG = window.BLOG || {};
…因为它混合了要求它处于全局范围的代码和不要求它处于全局范围的代码。它完全是功能性的,只是有点奇怪。我可能会选择这样或那样的方式:
// Requires that it's at global scope (and yes, this does work)
var BLOG = BLOG || {};
或
这取决于函数的调用方式。如果直接调用它,而不是通过对象属性(如外部作用域函数)调用,则在该调用中,此
将是松散模式下的全局对象(严格模式下的未定义
)。在浏览器上,这是窗口对象
您通常不会使用this
来尝试引用最外层作用域函数中的内容(出于这个原因)
如果有人这样做:
BLOG.Module.init();
…然后在对init
的调用中,this
(而不是\u this
)将引用模块
,您可以引用在最外层作用域函数末尾创建的对象上的其他属性(目前没有任何其他属性,只有init
)
重新编辑:
var
_this = this,
_hasLoaded = false;
// ...
function _privateMethod(){
$.ajax({
url: 'lazyload/lazyload.html',
success : function( data ){
// _hasLoaded = true; // I want to access the variable in my module, How do I refer to it?
}
});
}
只需取消注释该行:
_hasLoaded = true;
这是因为\u privateMethod
和调用\u privateMethod
而创建的任何ajax成功处理程序都是在最外层作用域函数中定义的变量上的闭包。所以你直接引用它们
如果“结束”这个词的用法不熟悉,不要担心
旁注:这是一个奇怪的构造:
var BLOG = window.BLOG || {};
…因为它混合了要求它处于全局范围的代码和不要求它处于全局范围的代码。它完全是功能性的,只是有点奇怪。我可能会选择这样或那样的方式:
// Requires that it's at global scope (and yes, this does work)
var BLOG = BLOG || {};
或
这取决于函数的调用方式。如果直接调用它,而不是通过对象属性(如外部作用域函数)调用,则在该调用中,此
将是松散模式下的全局对象(严格模式下的未定义
)。在浏览器上,这是窗口对象
您通常不会使用this
来尝试引用最外层作用域函数中的内容(出于这个原因)
如果有人这样做:
BLOG.Module.init();
…然后在对init
的调用中,this
(而不是\u this
)将引用模块
,您可以引用在最外层作用域函数末尾创建的对象上的其他属性(目前没有任何其他属性,只有init
)
重新编辑:
var
_this = this,
_hasLoaded = false;
// ...
function _privateMethod(){
$.ajax({
url: 'lazyload/lazyload.html',
success : function( data ){
// _hasLoaded = true; // I want to access the variable in my module, How do I refer to it?
}
});
}
只需取消注释该行:
_hasLoaded = true;
这是因为\u privateMethod
和调用\u privateMethod
而创建的任何ajax成功处理程序都是在最外层作用域函数中定义的变量上的闭包。所以你直接引用它们
如果“结束”这个词的用法不熟悉,不要担心
旁注:这是一个奇怪的构造:
var BLOG = window.BLOG || {};
…因为它混合了要求它处于全局范围的代码和不要求它处于全局范围的代码。它完全是功能性的,只是有点奇怪。我可能会去一个wa