UNPKG

mtl-js-sdk

Version:

50 lines (42 loc) 1.49 kB
"use strict"; 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; });