我继承了一个代码库,其中包含以下代码片段(从源代码简化以减少参数数量并匿名代码,同时保持一般行为):
/**
* @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的经验不足而在这里出现了一些细微差别?
答案 0 :(得分:3)
我们通常使用Object.assign
,let clone = {...original}
或#include "tools.cpp"
来避免变异我们稍后将在渲染中使用的对象。
现在,在大多数情况下,如果要改变/更改其属性,angular将不会检测其范围内对象的更改。但是,如果您使用克隆完全重写该对象,然后更改属性,则会触发渲染。
但是在你的情况下,没有必要做任何这样的事情,你的函数实际上每次调用时都会创建一个新对象,所以你可以安全地删除angular.extend。