JavaScript函数,作用于自身以使用另一个对象扩展自身

JavaScript函数,作用于自身以使用另一个对象扩展自身,javascript,Javascript,我确信我正在尝试做的事情有一个名字,我确信以前有人问过这个问题,但我正在努力寻找一个现有的答案——可能是因为我没有寻找正确的术语。我有一个名为extend的JavaScript函数,它类似于Object.assign,用于将对象合并在一起-在我当前的实现中,我没有访问Object.assign的权限 function extend(target) { for (var i = 1; i < arguments.length; ++i) { if (typeof argument

我确信我正在尝试做的事情有一个名字,我确信以前有人问过这个问题,但我正在努力寻找一个现有的答案——可能是因为我没有寻找正确的术语。我有一个名为extend的JavaScript函数,它类似于Object.assign,用于将对象合并在一起-在我当前的实现中,我没有访问Object.assign的权限

function extend(target) {
  for (var i = 1; i < arguments.length; ++i) {
    if (typeof arguments[i] !== 'object') {
      continue;
    }
    for (var j in arguments[i]) {
      if (arguments[i].hasOwnProperty(j)) {
        if (typeof arguments[i][j] === 'object') {
          target[j] = extend({}, target[j], arguments[i][j]);
        }
        else if (!target.hasOwnProperty(j)) {
          target[j] = arguments[i][j];
        }
      }
    }
  }
  return target;
}

任何指向现有答案的指针或参考都将不胜感激。

您可以将该功能分配给Object.prototype,以实现所需的功能:

Object.defineProperty Object.prototype, “扩展”, { 可枚举:false, 值:函数{ const target=this; 对于变量i=0;iconsole.logobj 正如@CertainPerformance所指出的,您所寻找的仍然会产生名称冲突。但这正是你想要的。您想在您的目标对象中添加一个自定义扩展方法,这就是我们要做的

评论中的解释

功能扩展{ 对于let i=0;iconsole.logresult;为什么您没有任何对Object.assign{}的访问权限?如果你不喜欢,为什么不使用聚填充呢?重新发明轮子是一个不必要的stretchJava脚本引擎,它似乎不支持Object.Assign,这就是为什么我们要使用polyfill,因为旧版本的JS不支持它@chrixm出于这个原因,我不想使用Object.prototype,但只针对我希望能够使用此扩展功能的特定对象定义它。@chrixm但特别是在目标对象上添加target.extend将产生名称冲突,正如@CertainPerformance所解释的。是否使用Object.prototype并不重要
target.extend = function() {
   ...
   this[j] = this.extend(this[j], arguments[i][j]);
   ...
   return this;
};