0

例如,我有一个对象的实例:

A = function(){};
a = new A();

如何添加方法

{b: function(){ console.log('b') },
 c: function(){ console.log('c') }
}

以实例 a?

4

4 回答 4

2

你应该看看prototype

是一个很好的解释。

编辑:您还可以将原型设置为函数数组,如下所示:

var Person = new function() {};

methods = {
    "methodA": function() {alert("method A")},
    "methodB": function() {alert("method B")},                         
}

Person.prototype = methods

p = new Person()
p.methodA(); // Alerts "method A"
于 2013-08-13T11:26:42.487 回答
2

如果要向实例添加方法,只需添加它们:

a.methodA = function() {
    alert("method A");
};

您可以对任何对象执行此操作。但是,您也可以将它们添加到实例的原型中,这将允许相同的方法在所有其他实例上可见:

var a = new A(),
    b = new A();

a.prototype.methodA = function() {
    alert("method A");
};

b.methodA();

如果您想一次性添加多个方法,请创建混合函数或使用框架:

function mix(a, b, typ) {
    var n, o;

    for (n in b) {
        if (! b.hasOwnProperty(n)) continue;

        if (!!(o = b[[n]) && (! typ || typeof o === typ)) {
            a[n] = o;
        }
    }
}

然后...

var a = new A();

mix(a, {
    "methodA": function() {
        alert("method A");
    },
    "methodB": function() {
        alert("method B");
    }
}, "function");
于 2013-08-13T11:55:34.030 回答
0

Prototype 用于向某种类型对象的所有实例添加方法(用于内存管理)。如果您只想将方法添加到对象的一个​​实例,您可以像添加任何属性一样添加它们:

var A = function() {
    //......
}

var myA = new A();
myA.methodOne = function() { console.log('called methodOne on myA'); }
myA.methodTwo = function() { console.log('called methodTwo on myA'); }

myA.methodOne();
myA.methodTwo();
于 2013-08-13T11:45:15.050 回答
0

检查jQuery.extend()您是否可以使用库/框架。

A = function(){};
a = new A();
d = {b: function(){ console.log('b') },
     c: function(){ console.log('c') }
    };
$.extend(a, d);
于 2013-08-13T11:59:31.573 回答