gpt4 book ai didi

javascript - 在 JavaScript 中覆盖 function.toString 时我应该担心吗?

转载 作者:行者123 更新时间:2023-11-29 20:01:29 24 4
gpt4 key购买 nike

当我用 JavaScript 编写函数包装器时(例如:throttledebounce 函数),我希望能够检查“装饰”函数并且仍然能够知道底层函数是什么。以throttle的实现为例:

function throttle(fn, time) {
var handle;

var execute = function() {
handle = null;
fn.apply(this, arguments);
};

var throttled = function() {
if(!handle) {
handle = setTimeout(execute.bind(this), time);
}
};

throttled.toString = function() {
return fn.toString() + "\n// throttled to " + time + "ms";
};

return throttled;
}

var makeAjax = throttle(function(callback) {
$.getJSON("/path", callback);
}, 500);

console.log(makeAjax);

console.log 调用显示:

function (callback) {
$.getJSON("/path", callback);
}
// throttled to 500ms

作为 throttle 的用户,我更关心我赋予它的功能,而不是它内部的 throttled

但是,我在重写原生函数的时候总觉得有点不自在。执行此操作时我应该担心任何合规性和/或性能问题吗?

最佳答案

在 Mozilla Developer Group 中,他们更多地谈论重写 toString()。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toString

我认为这里可能存在的问题是创建自动化单元测试(我的经验仅限于 NUnit Selenium),您可能无法使用私有(private) .toString() 或它可能导致不稳定的测试结果?调试也可能是个问题!

为了覆盖其他具有方法的本地 js 函数,您可能需要手动扩展所有方法以及替换被覆盖的方法。

Addy Osmani 在他的书“学习 JavaScript 设计模式”中对此进行了进一步讨论,http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript

关于javascript - 在 JavaScript 中覆盖 function.toString 时我应该担心吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282739/

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