Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объект-функция с заданным прототипом (https://javascript.ru/forum/misc/25203-obekt-funkciya-s-zadannym-prototipom.html)

Gvozd 28.01.2012 17:36

Объект-функция с заданным прототипом
 
Возможно я туплю.
Как мне создать объект функции, чтобы прототип у него был отличный от Function.prototype ?
Сам Function.prototype не меняется, и всегда указывает на один и тот же объект.
Зато у него можно задавать свойства, но надо именно для конкретных новосозданных функций, конкретный прототип.

PS Ответ на вопрос зачем это мне: Just for FUN.

melky 28.01.2012 18:31

как вариант, использовать обёртку. (у меня не получилось)

а ещё есть паттерн декоратор.

Gvozd 28.01.2012 18:36

Цитата:

Сообщение от melky
как вариант, использовать обёртку. (у меня не получилось)

Слабо представляю как обертка могла бы помочь.
ведь обертка тоже функция, и вопрос о способе задать прототип для функции остается актуальным
Цитата:

Сообщение от melky
а ещё есть паттерн декоратор.

те же яйца, только в профиль, не?

B@rmaley.e><e 28.01.2012 18:58

__proto__ как вариант. Но работает не везде (Хотя во всех имеющихся у меня распространённых браузерах (Opera, Chromium, FF) заработало).

Gvozd 28.01.2012 19:14

B@rmaley.e><e,
Не, не то

Livaanderiamarum 28.01.2012 21:35

Что мешает обертку использовать? И Наследовать её от Function
или что мешает использовать __proto__ ?
Тебе код написать?

Octane 28.01.2012 21:54

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 не работает

Gvozd 28.01.2012 21:55

Цитата:

Сообщение от Livaanderiamarum
или что мешает использовать __proto__ ?

Работает не во всех браузерах.
IE8, например
В общем не подходит.

Цитата:

Сообщение от Livaanderiamarum
Что мешает обертку использовать? И Наследовать её от Function

Цитата:

Сообщение от Livaanderiamarum
Тебе код написать?

Как я уже сказал, я слабо представляю чем может помочь обертка, в данной ситуации.
Поэтому да, написать код.
-------------------------------------------
Цитата:

Сообщение от Octane
В IE7-9 не работает

Хочется отталкиватся не от хаков браузеров, а от более чистого JS

B@rmaley.e><e 28.01.2012 22:14

Ещё можно поиграться с геттерами. Тоже хак, но, возможно, будет более кроссбраузерным.

Livaanderiamarum 28.01.2012 22:41

Как выглядит обьект функция)? долбаная консоль показывает текст.
-------------------------------------------
Черт, без __proto__ сложно))

блин, нельзя создать функцию ни чем кроме как конструктром Function((? а __proto__ нативно, задается ТОЛЬКО при создании обьекта.((((


Часовой пояс GMT +3, время: 01:30.