克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.
我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.
我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.
我有一个对象,x.我想把它复制为对象y,这样改变y就不要修改了x.我意识到复制从内置JavaScript对象派生的对象将导致额外的,不需要的属性.这不是问题,因为我正在复制我自己的一个文字构造的对象.
如何正确克隆JavaScript对象?
如何在Angular中复制对象并丢失其引用?
使用AngularJS,我可以使用angular.copy(object),但是我在Angular中使用它时遇到了一些错误.
EXCEPTION:ReferenceError:
angular未定义
我正在使用TypeScript处理Angular 2.我有用户管理组件,我有整个用户的表.
当单击表中的任何用户时,然后形成具有要编辑的整个属性的外观.选择用户发生事件如下:
onUserSelected(event) {
var selectedId = event.data.id;
this.selectedUser = this.users.filter(user => user.id === selectedId)[0]
}
Run Code Online (Sandbox Code Playgroud)
问题是当正在编辑selectedUser时,他的属性也会在表中发生变化而且看起来不太好.我尝试自己创建副本如下,但它没有帮助 - 用户类
clone() {
var cloned = new User(this.id, this.login, this.name, this.surname, this.phone);
return cloned;
}
Run Code Online (Sandbox Code Playgroud)
也许我正在做一些在Angular2中不好的做法?
当我们将一个model子组件传递给子组件并对其进行修改时,这些值只会反映在子组件的局部变量中,而不能用于父组件.我们可以通过引用从父到子传递值.所以这些变化也是可见的.
我observable在服务层使用a实现了相同的功能.但我们不能通过参考传递@Input吗?
哪种更好的做法,为什么?
声明一个变量:
exampleFunction(requestData: Object) {
const username = requestData.username;
doSomething(username);
}
Run Code Online (Sandbox Code Playgroud)
或直接访问对象属性?
exampleFunction(requestData: Object) {
doSomething(requestData.username);
}
Run Code Online (Sandbox Code Playgroud)
如果我使用的代码超过50行并且变量被多次使用怎么办?我应该多次使用变量'username'还是多次使用'requestData.username'?
我想从基类方法创建子类的新实例。
这有点复杂,但我会尽力解释。
这是一个例子:
class Base(){
constructor(){}
clone(){
//Here i want to create new instance
}
}
class Child extends Base(){}
var bar = new Child();
var cloned = bar.clone();
clone instanceof Child //should be true!
Run Code Online (Sandbox Code Playgroud)
所以。从这个例子中我想克隆我的bar实例,那应该是实例Child
出色地。我正在尝试以下Bar.clone方法:
clone(){
return new this.constructor()
}
Run Code Online (Sandbox Code Playgroud)
...这在编译代码中有效,但我有打字稿错误:
error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.
我有什么想法可以处理这个问题吗?
谢谢。希望这对一些人有帮助1:)