mtl-js-sdk
Version:
ynf-fw-mtl-api
43 lines (39 loc) • 1.15 kB
JavaScript
import utils from './utils'
/**
* 重载 obj[key] 的 getter 使其返回 value
*/
function clobber(obj, key, value) {
let needsProperty = false;
try {
obj[key] = value;
} catch (e) {
needsProperty = true;
}
if (needsProperty || obj[key] !== value) {
utils.defineGetter(obj, key, function () {
return value;
});
}
}
/**
* 递归合并 src 的属性到 target 中,target 中已存在的属性会被覆盖。
*/
function recursiveMerge(target, src) {
for (let prop in src) {
if (src?.hasOwnProperty(prop)) {
if (target.prototype && target.prototype.constructor === target) {
clobber(target.prototype, prop, src[prop]);
} else {
if (typeof src[prop] === 'object' && typeof target[prop] === 'object') {
recursiveMerge(target[prop], src[prop]);
} else {
clobber(target, prop, src[prop]);
}
}
}
}
}
let builder = {};
builder.recursiveMerge = recursiveMerge;
builder.assignGetter = clobber;
export default builder;