【问题标题】:Object.assign workaround in IEIE 中的 Object.assign 解决方法
【发布时间】:2018-12-07 15:09:18
【问题描述】:

我在 Angular 应用程序的以下代码中使用 ES6Object.assign 在除 IE 之外的任何地方都可以正常工作。

const resetSuppItem = (item) => {
      Object.assign(vm.suppitem, _.pick($scope.item, ['item1', 'item2', 'item3']));     
    }

有什么解决方法可以在 IE 中运行?

【问题讨论】:

  • 你可以用_.extend/_.assignIn好像你用的是lodash
  • 使用来自MDN的polyfill
  • @Satpal 这是最好的解决方案,因为我使用了 lodash,是的。谢谢!

标签: javascript angularjs ecmascript-6


【解决方案1】:

最好的选择是使用polyfill。如果不使用这个也许:

function newAssign(target) {
    for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i];
        for (var key in source) {
            if (source.hasOwnProperty(key)) {
                target[key] = source[key];
            }
        }
    }
    return target;
}

【讨论】:

  • 论据从何而来?
【解决方案2】:

一种解决方法是使用 jQuery 方法extend(),该方法非常简单,适用于 IE 和 Chrome:

var user = {Name: 'Marshall', Surname: 'Depp'};
var newUserObj = $.extend({}, user);
    
newUserObj.Country = 'USA';
newUserObj.Mobile= 'xxxxxxxxxx';

console.log(user);
console.log(newUserObj);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案3】:

    我的解决方案:

    function assign(target, ...sources) {
        var result = target;
    
        sources.forEach(function(source) {
        var keys = Object.keys(source);
        keys.forEach(function(key) {
            result[key] = source[key];
        });
    });
        return result;
    }
    

    非常类似于 Object.assign()

    示例:

    let one = { name:"vamshi"}
    
    let two = assign({},one)
    
    two.name  = "somenew name" // this wont update one.name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 2018-02-07
      • 2015-09-03
      • 1970-01-01
      • 2011-03-31
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多