Im привязка для создания простого объекта, подобного jQuery, но я просто не могу понять, как переопределить функцию внутри объекта.Javascript redefine private function
Как я могу воссоздать пользовательский errorHandler вне объекта ZOO, или я об этом ошибаюсь; Я читал, что прототипирование может быть лучшим методом, но опять же, я определяю объект только один раз.
<!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>
Почему бы просто не сделать его общедоступным методом '$ .errorHandler', если вы хотите, чтобы он был перезаписываемым? Нет необходимости использовать прототипы, просто свойства. – Bergi
@Bergi Потому что тогда он не получит доступ к частным свойствам и методам, поэтому мне придется сделать их общедоступными, но я не хочу, чтобы некоторые свойства или методы были доступны публично. – Christian
Нет, у исходной функции все равно будет доступ к ним. – Bergi