gpt4 book ai didi

javascript - 如何允许轻松覆盖 JavaScript 函数中的默认选项?

转载 作者:行者123 更新时间:2023-12-02 18:25:31 24 4
gpt4 key购买 nike

我正在用 javascript 编写以下函数:

Number.prototype.niceFormat(options) {
var defaultOptions = {
thousandSeparator: ',',
leftPad: 0,
decimalPlaces: 2
};
if (typeof options.thousandSeparator != 'undefined'
&& options.thousandSeparator != null) {
defaultOptions.thousandSeparator = options.thousandSeparator;
}

}

麻烦的是我希望选项完全灵活。

如果我调用 niceFormat({decimalPlaces: 3}),则 defaultOptions 属性 decimalPlaces 会相应地被替换。

我不想将 if 语句写入与 defaultOptions 中的属性一样多的次数。

有没有好的方法可以灵活地覆盖defaultOptions中属性的值?

基本上,我正在寻找一种 array_merge 用于 JavaScript 中的对象。

更新:

我从澳洲航空、Crayon 和 Paul 评论中获取了答案,并写道:

Number.prototype.niceFormat = function(options) {
var defaultOptions = {
thousandSeparator: ',',
leftPad: 0,
decimalPlaces: 2
};

var env = defaultOptions;
if (typeof options != 'undefined') {
for (option in env) {
if (options.hasOwnProperty(option)
&& typeof options[option] != 'undefined') {
env[option] = options[option];
}
}
}

有什么办法可以进一步改进吗?

最佳答案

您需要做的是检查两者都包含该属性,然后分配给它:

for (var i in options) if (options.hasOwnProperty(i) && defaultOptions.hasOwnProperty(i)) defaultOptions[i] = options[i];

hasOwnProperty() 检查该属性是否直接位于该对象上(而不是通过任何原型(prototype)或其他东西),并且它确实存在于该对象上。

关于javascript - 如何允许轻松覆盖 JavaScript 函数中的默认选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419690/

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