Я хотел бы создать класс Javascript, который я могу использовать следующим образом:
var f = new myFunction(arg1, arg2);
f.arg1; // -> whatever was passed as arg1 in the constructor
f();
f instanceof myFunction // -> true
typeof f // -> function
Я могу рассматривать его как обычный объект, даже добавляя нативный Function
объект в цепочку прототипов, но я не могу вызвать его как функцию:
function myFunction(arg1, arg2) {
this.arg1 = arg1;
this.arg2 = arg2;
}
myFunction.prototype = Function
var f = new myFunction(arg1, arg2); // ok
f.arg1; // ok
f(); // TypeError: f is not a function, it is object.
f instanceof myFunction // -> true
typeof f // -> object
Я могу заставить конструктор вернуть функцию, но тогда это не экземпляр myFunction
:
function myFunction(arg1, arg2) {
var anonFunction = function() {
};
anonFunction.arg1 = arg1;
anonFunction.arg2 = arg2;
return anonFunction;
}
var f = new myFunction(arg1, arg2); // ok
f.arg1; // ok
f(); // ok
f instanceof myFunction // -> false
typeof f // -> function
Есть предложения? Я должен добавить, что я действительно хочу избежать использования new Function()
, так как я ненавижу блоки строк кода.