|
Объект-функция с заданным прототипом
Возможно я туплю.
Как мне создать объект функции, чтобы прототип у него был отличный от Function.prototype ? Сам Function.prototype не меняется, и всегда указывает на один и тот же объект. Зато у него можно задавать свойства, но надо именно для конкретных новосозданных функций, конкретный прототип. PS Ответ на вопрос зачем это мне: Just for FUN. |
как вариант, использовать обёртку. (у меня не получилось)
а ещё есть паттерн декоратор. |
Цитата:
ведь обертка тоже функция, и вопрос о способе задать прототип для функции остается актуальным Цитата:
|
__proto__ как вариант. Но работает не везде (Хотя во всех имеющихся у меня распространённых браузерах (Opera, Chromium, FF) заработало).
|
B@rmaley.e><e,
Не, не то |
Что мешает обертку использовать? И Наследовать её от Function
или что мешает использовать __proto__ ? Тебе код написать? |
function XFunction(args, body) { var func = Function(args, body); func.__proto__ = Object.create(XFunction.prototype); return func; } XFunction.prototype = Object.create(Function.prototype); var f = new XFunction("", "return 1"); Function.prototype.test = function () { return 2; }; XFunction.prototype.xTest = function () { return 3; }; console.log(f()); //1 console.log(f.test()); //2 console.log(f.xTest()); //3 console.log("apply" in f); //true console.log(f instanceof Function); //true console.log(f instanceof XFunction); //true В IE7-9 не работает |
Цитата:
IE8, например В общем не подходит. Цитата:
Цитата:
Поэтому да, написать код. ------------------------------------------- Цитата:
|
Ещё можно поиграться с геттерами. Тоже хак, но, возможно, будет более кроссбраузерным.
|
Как выглядит обьект функция)? долбаная консоль показывает текст.
------------------------------------------- Черт, без __proto__ сложно)) блин, нельзя создать функцию ни чем кроме как конструктром Function((? а __proto__ нативно, задается ТОЛЬКО при создании обьекта.(((( |
Часовой пояс GMT +3, время: 01:30. |
|