我有以下代码:
this.myObject = {
key1: "val1",
key2: "val2"
}
this.aMethod = function (newObject) {
...
在这里,我想要一个新对象(可能是继承自this.myObject
),其中包含this.myObject
中的所有内容 newObject
中的所有内容,newObject
中的字段{1}}应覆盖this.myObject
我该怎么做?
这个想法是this.myObject
提供了一些默认值 - 但方法的用户可以覆盖这些值。我也批评这种整体“模式”。感谢。
答案 0 :(得分:5)
function object (o) {
function F() {}
F.prototype = o;
return new F();
}
有几十种方法可以做到这一点。 Yahoo Theater上的视频以及图书Javascript: The Good Parts和Object Oriented Javascript探讨了一些权衡。许多javascript库实现了一个简单的“类类”继承模式,但它只是整个蛋糕的一小部分。
答案 1 :(得分:5)
SomeObject.prototype.someMethod = function() {
this.myObject = { key1: 1, key2: 2 };
this.aMethod = function (o) {
var newObject = object(this.myObject);
for (var prop in o) {
if (o.hasOwnProperty(prop)) {
newObject[prop] = o[prop];
}
}
// Now newObject contains all properties from the passed in object
// and also inherits all properties from myObject
};
};
注意:我正在使用来自@Marco答案的对象函数。
答案 2 :(得分:0)
这应该做的工作:
this.aMethod = function(newObject){
combinedObject = {};
for(key in this.myObject){
combinedObject[key] = this.myObject[key];
}
for(key in newObject){
combinedObject[key] = newObject[key];
}
return combinedObject;
}
或者,如果您使用jquery,则在一行中:
return $.extend({},this.myObject,newObject);
答案 3 :(得分:0)
如果您正在寻找:
var Base = function() {
this.foo = "bar";
};
var MyClass = new Class({ extends: Base }, function() {
this.myMethod = function() {
return this.foo; // bar
}
});
检查一下:您可以使用缩小的2kb简约库,https://github.com/haroldiedema/joii/