gpt4 book ai didi

javascript - 如何使用 angular.copy() 保留原型(prototype)?

转载 作者:数据小太阳 更新时间:2023-10-29 04:07:03 27 4
gpt4 key购买 nike

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

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+ 中,原型(prototype)的属性完全丢失,尽管 migration guide for 1.2 to 1.3说:

This changes angular.copy so that it applies the prototype of the original object to the copied object. Previously, angular.copy would copy properties of the original object's prototype chain directly onto the copied object.

如何保留原型(prototype)的属性?

最佳答案

虽然评论在commit linked to从迁移指南说:

This changes angular.copy so that it applies the prototype of the original object to the copied object.

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

解决方案是只向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"

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

关于javascript - 如何使用 angular.copy() 保留原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com