gpt4 book ai didi

javascript - 扩展 $.mobile.changePage 以接受更多选项?

转载 作者:行者123 更新时间:2023-11-30 18:21:19 32 4
gpt4 key购买 nike

我想扩展 $.mobile.changePage 以接受更多选项,例如在页面完成加载时添加回调函数,以及更多 AJAX 调用选项(如 contentType)。有没有办法在不更改源代码的情况下做到这一点?如果没有,我愿意出于教育目的更改源代码,但无法在 jQuery Mobile GitHub 中找到它:https://github.com/jquery/jquery-mobile .感谢您提供任何帮助或指导。

最佳答案

JavaScript 的一个更令人兴奋的部分是能够使用通常称为 Monkey Patching 的技术重新定义任何函数。 . (顺便说一句,ES5 提供了一个新的 freeze 方法,允许开发人员防止此类修改。)

这是一个 JavaScript MonkeyPatch 的示例,它允许我们修改函数的行为而无需编辑它的源代码:

// A namespace object.
var Example = {};

// Sums two values.
Example.sum = function (a, b) {
return a + b;
}

// Usage:
var result = Example.sum(1, 2);

假设我们想在 sum 方法中添加日志记录,我们可以只在函数中添加 console.log 行,但我们也可以猴子修补它:

// Store a reference to the current 'Example.sum' function.
var originalSum = Example.sum;

// Now redeclare Example.sum...
Example.sum = function (a, b) {

// Call the originalSum function first...
var result = originalSum(a, b);

// Now add some logging...
console.log("Example.sum(" + a + ", " + b + ") yields " + result);

return result;
};

现在调用 Example.sum 时,我们不仅会像以前一样得到结果,还会写入一条控制台消息。考虑到这一点,您可以用相同的方式猴子修补 $.mobile.changePage 方法:

var originalChangePage = $.mobile.changePage;

// Redefine `changePage` so it accepts a 'complete' function in the options
// object which will be invoked when the page change is complete.
$.mobile.changePage = function (to, options) {
if (typeof options.complete === "function") {
$(body).one("pagechange", function (event) {
options.complete(event);
});
}

originalChangePage(to, options);
};

关于javascript - 扩展 $.mobile.changePage 以接受更多选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969953/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com