UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

43 lines (39 loc) 1.15 kB
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;