2017-07-26 65 views
0

不知道該怎麼說,我基本上想擴展我的類屬性,以便用戶可以覆蓋它們。不過,我更喜歡將屬性擴展爲自我執行的匿名函數。從匿名函數引用自我

var extend = function(target, sources) { 
     if (!sources.length) return target; 
     const source = sources.shift(); 

     if (isObject(target) && isObject(source)) { 
     for (const key in source) { 
      if (isObject(source[key])) { 
      if (!target[key]) Object.assign(target, { [key]: {} }); 
      extend(target[key], source[key]); // <-- Line 9 
      } else { 
      Object.assign(target, { [key]: source[key] }); 
      } 
     } 
     } 
     return extend(target, sources); 
    }.call(this, this, [ defaults, options ]); 

這似乎工作直至第9行(見上面的代碼評論)。它似乎無法引用它自己。但是,如果這是一個命名的函數而不是匿名的,這似乎工作正常。

我該如何得到這個工作?

回答

1

爲什麼你需要它是匿名的?調試變得更糟。您仍然可以使用函數表達式。

const myfunc = function nameFunctionExpression(i) { 
    if(i === 10) { 
    return i; 
    } 
    nameFunctionExpression(i + 1); 
}; 

myfunc(0); 

我不確定你要完成什麼。提供一種重寫屬性的方法?也許發佈一個用法示例?

function extend(obj, rest) { 
    return Object.assign(obj, rest); 
} 

const obj = { a: 1, nested: { c: 3 } }; 

// { a: 2, nested: { c: 4 }, b: 3 } 
console.log(extend(obj, { a: 2, b: 3, nested: { c: 4 } }));