无法修改函数原型以便截获对函数的调用。最接近的方法是添加一个可以调用的方法来代替构造函数。例如:
Function.prototype.create = function() {
var obj = new this();
this.apply(obj, arguments);
obj.foo = 'bar';
return obj;
};
function SomeObject(name) {
this.name = name;
}
var obj = SomeObject.create('Bob');
obj.foo;
或者,您可以编写一个函数,调用它来构建一个构造函数:
Function.makeConstructor = function(fn) {
return function proxyConstructor() {
if(this instanceof proxyConstructor) {
var obj = new fn();
fn.apply(obj, arguments);
obj.foo = 'bar';
return obj;
} else {
return fn.apply(null, arguments);
}
};
};
var SomeObject = Function.makeConstructor(function(name) {
this.name = name;
});
var obj = SomeObject.create('Bob');
obj.foo;