mtl-js-sdk
Version:
50 lines (42 loc) • 1.49 kB
JavaScript
;
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
define(['./utils'], function (utils) {
/**
* 重载 obj[key] 的 getter 使其返回 value
*/
function clobber(obj, key, value) {
var 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 (var 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]);
}
}
}
}
}
var builder = {};
builder.recursiveMerge = recursiveMerge;
builder.assignGetter = clobber;
return builder;
});