首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中覆盖函数的能力是强还是弱?

在JavaScript中覆盖函数的能力是强还是弱?
EN

Software Engineering用户
提问于 2011-11-10 22:29:08
回答 2查看 1.2K关注 0票数 2

最近,我在使用Liferay时遇到了以下代码(来自liferay.js):

代码语言:javascript
复制
....
if (!Liferay._ajaxOld) {
    Liferay._ajaxOld = jQuery.ajax;
}

if (Liferay._ajaxOld) {
    jQuery.ajax = function(options) {
        if (Liferay.Util) {
            options.url = Liferay.Util.getURLWithSessionId(options.url);
        }
        return Liferay._ajaxOld(options);
    };
}
....

如您所见,上面的代码覆盖了函数"jQuery.ajax“来修改"options.url”。有人可能会说,这是语言的一种优势,因为我们可以轻松地覆盖和自定义现有的函数。

但是,我认为这种能力很容易导致问题。例如,我的代码可以覆盖相同的函数"jQuery.ajax“来修改"options.url”,这与上面的代码不同。因此,任何期望由"liferay.js“定义的行为的代码都可能不再像预期的那样工作。

我认为这是语言的一个弱点,因为它没有提供适当的封装。对于该领域语言的这一特性/能力,有什么共识?

EN

回答 2

Software Engineering用户

发布于 2011-11-10 22:31:35

我认为这真的取决于你问谁。Javascript绝不是一种完美的语言,但就像对私有变量的抽象一样,这可能是一件好事,也可能是一件坏事,取决于具体情况。

如果您正在使用一个库,并且希望覆盖一个函数,那么这是一件好事,如果您是一个库或函数的作者,并且有人以您不想要的方式使用您的代码,那么它就不是。

票数 1
EN

Software Engineering用户

发布于 2011-11-10 22:41:14

这是一种力量。如果您正在修改一个现有的函数,那么您就知道该修改后的函数所做的事情,并且知道如何使用它与规范不同,而不是遵循使用旧规范的代码。

这并不是说它会覆盖解释器本身中的函数,因此其他网页将使用修改后的规范。

这样做的一个好处是,您可以修复存在于CDN上的库中的小错误,而不需要保存和服务库本地的整个副本。

这可能有益的地方之一是内容安全策略(,CSP)环境。由于jQuery动画通常使用CSP环境中可能禁止的样式属性,因此您可能希望重写一些jQueries函数,以指向外部CSS3表并分配类属性。因此,您可以在CDN上托管的大型库中继续使用jQuery,在本地托管一个小型js,它以不违反您的CSP的方式重新定义违反CSP的jQuery函数,并使用调用这些函数的打包小部件,而不需要修改打包的小部件。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/119310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档