Возможный дубликат:
Может ли объект JavaScript иметь цепочку прототипов, а также быть функцией?
Я хочу создать вызываемый JavaScript-объект с произвольной цепочкой прототипов, но без изменения Function.prototype.
Другими словами, это должно работать:
var o = { x: 5 };
var foo = bar(o);
assert(foo() === "Hello World!");
delete foo.x;
assert(foo.x === 5);
Без каких-либо глобальных изменений.