我打算建立一个类似于jQuery的简单对象,但我只是想不出如何在对象内部重新定义函数。
我该如何在ZOO对象之外重新创建自定义errorHandler,或者我将以错误的方式进行操作?我读过原型可能是一个更好的方法,但是再说一次,我只定义了一次对象。
<!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>
私有函数的this
上下文为window
。似乎创建了一些内部函数变量,我们可以将函数名称用作变量:
$.override = function(methodName, method) {
errorHandler = method;
};
正如TJCrowder所建议的那样,您应该定义一个函数变量,如下所示:
var errorHandler = function(msg) { ... }
更新:要使其动态,可以使用如下eval()
功能:
$.override = function(methodName, method) {
eval(methodName + " = method");
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句