假设我有让Foo.class在Java中:有没有办法在JavaScript代码中“期待”某个Java类的实例?
public class Foo {
public int id;
public String data;
}
,我还拥有富 “阶级” 在JavaScript:
function Foo(id, data) {
this.id = id;
this.data = data;
}
另外,假设我有Java的控制器,它返回的Foo实例.class作为对REST请求的响应。在我的JavaScript(AngularJS)代码中,请求发送如下:
$http.get(url + 'bar/get-foo/')
.success(function (response) {
var foo = new Foo(response.id, response.data);
logger.info("SUCCESS: /get-foo");
})
.error(function (error_message) {
logger.error(error_message)
});
它的工作原理。但有没有办法避免每个属性响应Foo构造函数(某种期待Foo对象,或将其转换为Foo对象)?
我尝试使用Object.create(Foo, response)
但我得到TypeError: Property description must be an object: true
当然总是有重构JavaScript端美孚构造成的可能性:
function Foo(foo) {
this.id = foo.id;
this.data = foo.data;
}
但是,这将需要的代码库的很大一部分的重构。
谢谢你的时间。我很感激!
PS:对于那些想知道为什么我需要这个:这对于像Foo这样的小班来说不是问题,但是一些回答是一个更大的班级(超过十几个字段)的实例,这些都不在我的控制。
编辑:我接受Chichozell的答案只是因为它需要的工作量最少。 Robin's和jonnyknowsbest的答案也适用,(并且将用于纯JavaScript,不同于Chichozell的答案,这是AngularJS特有的答案)。没有尝试Laurentiu L.的答案,但看起来应该也可以。 反正这是一个解决方案(而不是解决方案):
.success(function (response) {
var foo = new Foo();
angular.extend(foo, response); // angular.merge() for "deep-copy"
//...
}
非常感谢大家谁回答/评论/在这个线程编辑。
谢谢,我从来不知道这些AngularJS的功能。 – zkristic