如何使用angular.copy()保留原型
How to retain prototype with angular.copy()?
我使用的是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.js1.3.0+中,原型的属性完全丢失,尽管1.2到1.3的迁移指南中说:
这将更改angular.copy,以便将原始对象的原型应用于复制的对象。以前,angular.copy会将原始对象的原型链的属性直接复制到复制的对象上。
如何从原型中保留属性?
虽然迁移指南中链接到的提交中的注释说:
这将更改
angular.copy
,使其应用原始的原型对象到复制的对象。
只有当没有提供CCD_ 2的目的地参数时,这才是真的。当提供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"
更新:这似乎仍然相关,因为v1.6.5中的angular.copy
仅在未定义目标时调用getPrototypeOf(source)
。
相关文章:
- 分派点击事件并保留击键修饰符
- 使用“;这个“;JavaScript原型方法中的关键字
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 提交后保留下拉选择的值
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- Node.js中的JavaScript原型对象效率
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 重载JS'firefox中的对象原型
- 使用递归属性迭代保留属性结构
- Jquery html() 和保留元素名称
- Javascript扩展对象's原型,但保留旧原型
- 如何使用angular.copy()保留原型
- 在保留状态的同时调用原型方法
- 正确的语法以保留原型的javascript上下文
- 变量重赋值保留了以前的原型函数.为什么