我使用的是Angular.js 1.3.x。在以前版本的角(包括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+中,原型中的属性完全丢失了,尽管1.2至1.3移徙指南说:
这将更改angular.copy,以便将原始对象的原型应用于复制的对象。以前,angular.copy会将原始对象的原型链的属性直接复制到复制的对象上。
如何将属性与原型保持在一起?
发布于 2015-02-03 18:35:54
尽管“迁移指南”( 提交链接到 )中的评论说:
这将更改
angular.copy,以便将原始对象的原型应用于复制的对象。
只有当不提供angular.copy(source, [destination]);的目标参数时,这才是正确的。当提供destination时,只有对象被复制的直接属性。
解决方案只向angular.copy函数提供source对象,而不使用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"Update:这似乎仍然相关,因为angular.copy在v1.6.5中只调用getPrototypeOf(source) 如果目标未定义。
https://stackoverflow.com/questions/28306269
复制相似问题