当我点击.test
时它没有执行do_alert();
函数并给我一个错误的问题:
do_alert();没有定义。
问题是什么?页面加载时已经读取了主函数helpers
为什么可以'从logout_users
函数获取此函数?
var setup_system = (function($) {
"use strict";
return {
init: function() {
this.logout_users();
this.helpers();
},
logout_users: function() {
$(document).on('click', '.test', function(e) {
e.preventDefault();
do_alert();
});
},
helpers: function() {
function do_alert() {
alert();
}
}
};
})(jQuery);
jQuery(document).ready(function() {
setup_system.init();
});
注意:我尝试通过在this.helpers()
函数中添加logout_users
来重新阅读帮助函数,但没有任何变化。
答案 0 :(得分:3)
这是因为您已在do_alert()
函数的范围内定义了helpers
。
要解决此问题,您需要将该功能移动到您返回的对象的范围内。您可以将它放在对象的根级别(这可以正常工作,但如果您有很多'帮助'函数可能会变得混乱)或者如果您将其定义为helpers
属性,则可以将其嵌套在var setup_system = (function($) {
"use strict";
return {
init: function() {
this.logout_users();
},
logout_users: function() {
var _obj = this;
$(document).on('click', '.test', function(e) {
e.preventDefault();
_obj.helpers.do_alert();
});
},
helpers: {
do_alert: function() {
alert('foo');
}
}
};
})(jQuery);
jQuery(function() {
setup_system.init();
});
属性中另一个对象。就个人而言,我会使用后者来表达一些组织。试试这个:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test">Click me</div>
_obj
请注意,我将对象的引用缓存为click
处理程序之外的this
,因为该块.test
将引用所单击的DECLARE @YourValues TABLE(ID INT IDENTITY, SomeVal VARCHAR(100));
INSERT INTO @YourValues VALUES
('FFS1')
,('FFS2')
,('FFS12')
,('FFS1.1')
,('FFS1.2')
,('FFS1.1E')
,('FFS1.1R')
,('FFS12.1')
,('FFS12.2')
,('FFS.12.1E')
,('FFS12.1R')
,('FFS12.2E')
,('FFS12.2R');
元素。< / p>
答案 1 :(得分:1)
Do_alert函数仅存在于helpers方法中,因此您无法访问它。
您需要直接在logout_user方法或外部声明您的函数,请尝试以下方法:
Brush
答案 2 :(得分:0)
当helpers
函数调用init
时,所发生的一切就是声明了do_alert
。但是函数声明被提升到它们的词法范围的顶部。 do_alert
的词法范围是helpers
函数定义的范围。因此,do_alert
功能无法访问helpers
。
你可以做几件事。首先想到的是:你可以让helpers
方法在被返回的对象上定义一个名为do_alert
的方法,而不仅仅是声明一个函数,如下所示:
helpers: function() {
this.doAlert = function() {
alert();
}
}
当传递给jQuery的事件处理程序调用{{1}}时,它将无法使用上述解决方案。相反,您需要确保在该事件处理程序中对返回的对象调用doAlert()
。这就是你如何做到的:
doAlert