Javascript扩展了一个对象问题

时间:2010-11-11 13:10:51

标签: javascript

我有以下代码:

this.myObject = {
   key1: "val1",
   key2: "val2"
}

this.aMethod = function (newObject) {
    ...

在这里,我想要一个新对象(可能是继承自this.myObject),其中包含this.myObject 中的所有内容 newObject中的所有内容,newObject中的字段{1}}应覆盖this.myObject

中现有的字段

我该怎么做?

这个想法是this.myObject提供了一些默认值 - 但方法的用户可以覆盖这些值。我也批评这种整体“模式”。感谢。

4 个答案:

答案 0 :(得分:5)

道格拉斯·克罗克福德说道:

function object (o) {
  function F() {}
  F.prototype = o;
  return new F();
}

有几十种方法可以做到这一点。 Yahoo Theater上的视频以及图书Javascript: The Good PartsObject 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/