gpt4 book ai didi

Javascript 重新定义私有(private)函数

转载 作者:行者123 更新时间:2023-11-30 12:36:20 25 4
gpt4 key购买 nike

我想构建一个类似于 jQuery 的简单对象,但我只是想不出如何在对象内部重新定义一个函数。

我如何在 ZOO 对象之外重新创建一个自定义的 errorHandler,或者我是不是以错误的方式解决了这个问题;我读到原型(prototype)设计可能是更好的方法,但话又说回来,我只定义对象一次。

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script>
(function( $ ) {
var hasError = 0;

var errorHandler = function(msg) {
hasError = 1;
console.log('Before: ' + msg);
};

var callback = {
success: function(data) { },
failure: function(msg) { }
};

$.init = function() {
try {
something_bad;
}
catch(e) {
errorHandler(e.toString());
}
callback.success(1);
};

$.override = function(methodName, method) {
// How do i redefine the method??
methodName = method;
};

}(window.ZOO = window.ZOO || {}));
</script>
</head>

<body>
<script>
ZOO.override('errorHandler', function(msg) {
hasError = 1;
console.log('After: ' + msg);
});

ZOO.override('callback.success', function(data) {
console.log(data);
});

ZOO.init();
</script>
</body>
</html>

最佳答案

私有(private)函数的this上下文为window。似乎创建了一些内部函数变量,我们可以将函数名称用作变量:

 $.override = function(methodName, method) {
errorHandler = method;
};

按照 T.J.Crowder 的建议,您应该像这样定义一个函数变量:

var errorHandler = function(msg) { ... }

更新:要使其动态化,您可以像这样使用 eval() 函数:

$.override = function(methodName, method) {
eval(methodName + " = method");
};

关于Javascript 重新定义私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25958024/

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