例如,我有一个对象的实例:
A = function(){};
a = new A();
如何添加方法
{b: function(){ console.log('b') },
c: function(){ console.log('c') }
}
以实例 a?
例如,我有一个对象的实例:
A = function(){};
a = new A();
如何添加方法
{b: function(){ console.log('b') },
c: function(){ console.log('c') }
}
以实例 a?
你应该看看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"
如果要向实例添加方法,只需添加它们:
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 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);