Ver*_*onW 28 javascript jquery constructor object
我有一个像这样的JavaScript构造函数:
function Box(obj) {
this.obj = obj;
}
Run Code Online (Sandbox Code Playgroud)
我想传递一个对象作为这样的参数:
var box = new Box({prop1: "a", prop2: "b", prop3: "c"})
Run Code Online (Sandbox Code Playgroud)
并给我这样的东西:
box.obj.prop1
box.obj.prop2
box.obj.prop3
Run Code Online (Sandbox Code Playgroud)
但我希望这些属性直接在对象上,如下所示:
box.prop1
box.prop2
box.prop3
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
function Box(obj) {
this.prop1 = obj.prop1;
this.prop2 = obj.prop2;
this.prop3 = obj.prop3;
}
Run Code Online (Sandbox Code Playgroud)
但这并不好,因为那时我的构造函数必须在对象参数的属性名称之前"知道".我想要的是能够将不同的对象作为参数传递,并将它们的属性直接指定为构造函数创建的新自定义对象的属性,所以我得到box.propX
和不得box.obj.propX
.希望我自己清楚,也许我正在测量一些非常明显的东西,但我是新手,所以请你需要帮助!
提前致谢.
Hem*_*ock 24
你可以做到这一点.可能还有一种jquery方式......
function Box(obj) {
for (var fld in obj) {
this[fld] = obj[fld];
}
}
Run Code Online (Sandbox Code Playgroud)
如果您(我认为是愚蠢的)扩展对象,您可以包含hasOwnProperty的测试
function Box(obj) {
for (var fld in obj) {
if (obj.hasOwnProperty(fld)) {
this[fld] = obj[fld];
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
啊,哈!它的jQuery.extend
所以,jQuery方式是:
function Box(obj) {
$.extend(this, obj);
}
Run Code Online (Sandbox Code Playgroud)
简单地把它放在你的构造函数中
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
this[prop] = obj[prop];
}
}
Run Code Online (Sandbox Code Playgroud)