如何将方法添加到对象的实例中

How to add methods to an instance of the object

本文关键字:对象 实例 添加 方法      更新时间:2023-09-26

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

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

如何添加方法

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

举个例子?

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

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");

您应该了解一下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"

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();

如果您可以使用库/框架,请查看jQuery.extend()

A = function(){};
a = new A();
d = {b: function(){ console.log('b') },
     c: function(){ console.log('c') }
    };
$.extend(a, d);