gpt4 book ai didi

javascript - 将 $.extend 与用户定义的对象一起使用

转载 作者:行者123 更新时间:2023-11-30 15:48:36 25 4
gpt4 key购买 nike

我正在使用的库 (DataTables) 接受使用所有自定义选项声明的对象。

当库尝试使用类似 $.extend({}, defaults , confs) 构建结果配置并接收用户定义的对象时,代码失败。不幸的是,confs 中定义的所有方法在 $.extend

的结果中都丢失了

这段代码解释了我要做什么:

class BaseConf {
constructor() {
this.ordering = false;
}
initComplete() {
console.log('BaseConf.foo executed');
}
}

class ExtendedConf extends BaseConf {
initComplete() {
super.foo();
console.log('ExtendedConf.foo executed');
}
}

conf = new ExtendedConf();


mergedConf = $.extend({}, conf);

console.log(mergedConf.ordering); // <-- print false
console.log(mergedConf.initComplete); // <-- print undefined

是否知道为什么会发生这种情况以及如何解决它的一些建议?

最佳答案

$.extend 的最终结果是对象的浅拷贝 conf到目标对象 {} .

但是,它不会改变目标对象的原型(prototype)。因此,虽然实例属性是从 conf 复制过来的至 {} , {}不会成为 ExtendedConf 的实例或 BaseConf , 因此不携带 initComplete方法。

你可以做的不仅仅是 {} , 你可以使用 Object.create创建一个原型(prototype)为 ExtendedConf 的对象的原型(prototype)。这样,生成的对象继承 ExtendedConf .之后,使用 jQuery 的 $.extend复制实例属性。

var conf = $.extend(Object.create(ExtendedConf.prototype), conf);

关于javascript - 将 $.extend 与用户定义的对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705019/

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