如何用angular.copy()保留原型?

时间:2015-02-03 18:35:54

标签: javascript angularjs

我使用的是Angular.js 1.3.x.在以前版本的Angular(包括1.3.0-beta5)中,以下代码会将原型中的属性直接复制到新对象:

function x() {};
x.prototype.logIt = function() {console.log("it")};
var src = new x(); // x has custom properties on the prototype
var dest = {};
angular.copy(src, dest);
dest.logIt(); // "TypeError" in Angular 1.3.0+ 

然而,在Angular.js 1.3.0+中,尽管migration guide for 1.2 to 1.3说:{/ p>,但原型中的属性完全丢失了。

  

这会更改angular.copy,以便将原始对象的原型应用于复制的对象。以前,angular.copy会将原始对象的原型链的属性直接复制到复制的对象上。

如何保留原型中的属性?

1 个答案:

答案 0 :(得分:13)

虽然迁移指南中commit linked to的评论说:

  

这会更改angular.copy,以便它应用原始原型   对象复制的对象。

仅当未提供angular.copy(source, [destination]);的目标参数时才会这样。提供destination时,仅提供对象are copied的直接属性。

解决方案是仅向source函数提供angular.copy对象,而忽略destination参数:

function x() {};
x.prototype.logIt = function() {console.log("it")};
var src = new x();
var dest = angular.copy(src); // no second parameter
dest.logIt(); // logs "it"

更新:这似乎仍然相关,因为v1.6.5中的angular.copy仅调用getPrototypeOf(source) if destination is undefined