Javascript 引用函数数组中的另一个函数
我使用的是require.js,有一个函数库,我在多个地方使用。我这样定义函数:Javascript 引用函数数组中的另一个函数,javascript,requirejs,Javascript,Requirejs,我使用的是require.js,有一个函数库,我在多个地方使用。我这样定义函数: define(function (require) { "use strict"; var $ = require('jquery'); var UsefulFuncs = {}; UsefulFuncs.hideAlert = function() { $('.alert').hide(); }; UsefulFuncs.loadURL
define(function (require) {
"use strict";
var $ = require('jquery');
var UsefulFuncs = {};
UsefulFuncs.hideAlert = function() {
$('.alert').hide();
};
UsefulFuncs.loadURL = function (url){
navigator.app.loadUrl(url, { openExternal:true });
return false;
};
UsefulFuncs.linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
this.loadURL(url);
};
return UsefulFuncs;
});
然后,在我的主干视图中,我使用以下命令调用库中的函数:
UsefulFuncs = require('app/utils/useful_func'),
....
UsefulFuncs.linkClicked
这适用于库中的任何独立函数,例如hideAlert()。但是,当库中的一个函数引用另一个函数时,例如linkClicked()调用loadURL(),我会得到一个错误:
Uncaught TypeError: Object [object Object] has no method 'loadURL'.
有没有关于如何引用loadUrl()的想法?试试这样的方法:
define(function (require) {
"use strict";
var $ = require('jquery');
var hideAlert = function() {
$('.alert').hide();
};
var loadURL = function (url){
navigator.app.loadUrl(url, { openExternal:true });
return false;
};
var linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
loadURL(url);
};
return {
hideAlert : hideAlert,
loadURL : loadURL,
linkClicked : linkClicked
};
});
UsefulFuncs.linkClicked()
我假设您将
UsefulFuncs.linkClicked
设置为事件的处理程序
如果您这样使用它:
define(function (require) {
"use strict";
var $ = require('jquery');
var hideAlert = function() {
$('.alert').hide();
};
var loadURL = function (url){
navigator.app.loadUrl(url, { openExternal:true });
return false;
};
var linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
loadURL(url);
};
return {
hideAlert : hideAlert,
loadURL : loadURL,
linkClicked : linkClicked
};
});
UsefulFuncs.linkClicked()
,函数中的此
将引用UsefulFuncs
,因此此.loadURL()
将有效
但是,由于您将它设置为事件的处理程序,因此可以通过其他方式调用它,this
被设置为其他对象(可能是触发事件的元素)。为避免事件处理机制更改您的此
,您可以在分配函数时绑定该函数:
element.onclick = UsefulFuncs.linkClicked.bind(UsefulFuncs);
另一种解决方法是避免在处理程序中使用this
,如下所示:
UsefulFuncs.linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
UsefulFuncs.loadURL(url);
};
这会在
UsefulFuncs
上创建一个闭包(第一种方法也可以,但它更标准化)。我知道这是一个解决方法,因为它也应该与“This”一起使用。