希望这个标题是正确的:)
我使用模块化模式:
(function (vvv, $, undefined) {
'use strict';
vvv = (function () {
vvv.functionName = (function () {
...
});
......
}(
window.vvv = window.vvv || {},
jQuery
));
我还使用David Walsh
制作的去抖功能vvv.debounce = (function(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
});
我使用去抖功能来调用某个窗口大小的其他函数。但是现在在这些函数中我的主vvv对象不存在。现在要快速修复此问题,我只需调用window.vvv.myfunction()。修复很好,但是,重点是我想要在vvv对象中的所有函数。不知道为什么,这更多是出于好奇:)你会如何解决这个问题?
答案 0 :(得分:0)
手动将对象绑定到新函数。我想你想做这样的事情:
vvv.debounce(function() { /* do stuff */ }.bind(vvv), 100);
但请检查.bind()
的浏览器兼容性,并非所有IE版本都支持此功能。您也可以使用jQuery.proxy
:
vvv.debounce($.proxy(function() { /* do stuff */ }, vvv), 100);
这也适用于IE。
答案 1 :(得分:0)
如果你想在vv中保持debounce并仍然使回调解析vv你可以
return function() {
var context = this, args = arguments;
context.vv = vv; // add prop vv to context which is "this"
......
.....
}
在回调中,您可以访问vv this.vv
而不是window.vv