这种angular.extend的使用是否有用?

时间:2018-01-08 10:04:55

标签: javascript angularjs

我继承了一个代码库,其中包含以下代码片段(从源代码简化以减少参数数量并匿名代码,同时保持一般行为):

/**
 * @param {float} a
 * @param {string} b
 * @param {string} c
 * @param {boolean} d
 & @return (object)
    */
srv.pack = function(a , b , c , d)
{
    return angular.extend({} , {
        a: a ,
        e: d ? b : c , 
        f: d ? c : b
    });
};

根据我对angular.extend的文档的阅读,似乎angular.extend的这种用法没有用处,代码可以通过删除来简化。是不是这种情况,或者由于我对AngularJS的经验不足而在这里出现了一些细微差别?

1 个答案:

答案 0 :(得分:3)

不,不!因为您正在创建要复制的对象,就在复制之前,您可以直接返回对象。

我们通常使用Object.assignlet clone = {...original}#include "tools.cpp"来避免变异我们稍后将在渲染中使用的对象。

现在,在大多数情况下,如果要改变/更改其属性,angular将不会检测其范围内对象的更改。但是,如果您使用克隆完全重写该对象,然后更改属性,则会触发渲染。

但是在你的情况下,没有必要做任何这样的事情,你的函数实际上每次调用时都会创建一个新对象,所以你可以安全地删除angular.extend。