1

我有一些自定义对象定义,例如:

var Class1 = function () { this.value = ''; };
var Class2 = function () { this.data = ''; };

Class1.prototype = {
    setObject: function () {
        for (var prop in this){
            if (typeof obj[prop] != 'undefined')
                this[prop] = obj[prop];
        }
    }
}

Class2.prototype = {
    setObject: function () {
        for (var prop in this){
            if (typeof obj[prop] != 'undefined')
                this[prop] = obj[prop];
        }
    }
}

有没有办法让setObject所有类都默认使用这种方法?

是从 JavaScript 中的类型(模拟)继承该函数Object更好,还是使用全局函数或一一定义更好?

4

3 回答 3

2

如果您要使用 jQuery 或 underscore 之类的库,那么您已经可以访问弹性extend方法(请参阅$.extend_.extend),所以我想说没有理由在这些自定义对象类型上重新发明轮子。

否则,您可以拥有Class1Class2继承自一个公共基类:

function BaseClass() {
    ...
}
BaseClass.prototype = {
    setObject: function (obj) {...}
};

function Class1() {
    ...
}
Class1.prototype = new BaseClass();

function Class2() {
    ...
}
Class2.prototype = new BaseClass();

var a = new Class1();
a.setObject({...});

var b = new Class2();
b.setObject({...});

或者,如果这些对象不应包含共同的祖先,您可以将它们定义为使用相同的setObject函数引用:

function setObject(obj) {
    ...
}

function Class1() {
    ...
}
Class1.prototype = {
    setObject: setObject
};
function Class2() {
    ...
}
Class2.prototype = {
    setObject: setObject
}
于 2013-08-15T17:10:42.060 回答
0

Ivan 展示了如何从对象继承。关于使用构造函数和继承的更多信息可以在这里找到:原型继承 - 编写

您也可以使用混合模式:

var mixIn=function(target,source){
  for(fn in source){
    if(source.hasOwnProperty(fn)){
      target.prototype[fn]=source[fn];
    }
  }
};
var ObjectSettable = {
    setObject: function () {
        for (var prop in this){
            if (typeof obj[prop] != 'undefined')
                this[prop] = obj[prop];
        }
    }
};
var Class1 = function () { this.value = ''; };
//... Class1.prototype stuff
mixIn(Class1,ObjectSettable);
于 2013-08-16T00:18:25.450 回答
0

我不确定你是否知道,但 Javascript 中没有类或方法。只有对象、函数和称为“原型”的特殊属性。

模拟类的常用方法是这样的:

var Class  = function () { this.prop = "hi" };
Class.prototype.doMethod = function () { this.prop = "hi2"; };
Class.prototype.setObject: function () {
    for (var prop in this){
        if (typeof obj[prop] != 'undefined')
            this[prop] = obj[prop];
    }
}

// those classes "inherit" from Class
var Class1 = function () { Class.call(this); this.value = ''; };   
Class1.prototype = new Class();

var Class2 = function () { Class.call(this); this.data  = ''; };
Class2.prototype = new Class();
于 2013-08-15T17:27:33.677 回答