使用美元.使用用户定义的对象扩展
Use $.extend with user defined object
我正在使用的一个库(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
到目标对象{}
的浅拷贝。
但是,它不会改变目标对象的原型。因此,当实例属性从conf
复制到{}
时,{}
不会成为ExtendedConf
或BaseConf
的实例,因此不携带initComplete
方法。
你可以做的是,除了{}
之外,你可以使用Object.create
来创建一个原型是ExtendedConf
原型的对象。这样,结果对象继承ExtendedConf
。之后,使用jQuery的$.extend
来复制实例属性。
var conf = $.extend(Object.create(ExtendedConf.prototype), conf);
相关文章:
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- FabricJS CurvedText对象(扩展)在更新间距和文本属性时未显示
- 如何为特定的javascript对象扩展数组或对象原型
- 具有函数继承的对象扩展数组
- 将 jQuery 对象扩展到我自己的对象
- HTMLCollection 对象扩展
- Javascript 对象扩展
- jQuery用一个对象扩展$.fn
- 有没有一种方法可以在javascript中隔离本机对象扩展
- Backbone或javascript对象扩展错误
- 从另一个对象扩展而不使用object.JavaScript中的assign (ES6特性)
- 对象扩展vs.对象赋值
- 是否可以将一个对象扩展为“;一个函数
- 如何在jquery中用子对象$.扩展对象
- 为什么我有一个共享缓存时,我jQuery.使用相同的缓存对象扩展两个对象
- 使用美元.使用用户定义的对象扩展
- es7对象扩展表示法如何创建浅拷贝来替换原始对象
- 如何使用新对象扩展 $.fn
- 如何在 javascript 中让多个对象扩展 1 个对象
- IE8中对象扩展后的奇怪setAttribute行为