Имя: Пароль:
IT
Веб-мастеринг
javascript. Как задать прототип функции?
0 D_Pavel
 
18.08.15
12:32
Можно конструктором через new сделать объект, прототип которого другой объект. А как сделать функцию, и задать ей прототип?
1 Garikk
 
18.08.15
12:35
я так понимаю вопрос про интерфейсы, насколько я знаю в js их нет

P.S. в "прототип другой объект" - это вроде как наследование
2 D_Pavel
 
18.08.15
12:39
Ну да, наследование.
Нужно чтобы было так:
есть объект у которого есть свойства:
obj.aaa = 10;
нужно создать функцию, которая наследует эти свойства:
alert (func.aaa); // выведет 10
но если написать: func(), то выполнится как функция.
3 D_Pavel
 
18.08.15
12:40
ну или сделать объект, который сможет выполниться: obj();
4 ДенисЧ
 
18.08.15
12:42
5 Garikk
 
18.08.15
12:42
а это уже перегрузка назвается, overloading

вот тут помедитировать можно http://stackoverflow.com/questions/10855908/how-to-overload-functions-in-javascript
6 Garikk
 
18.08.15
12:44
хотя нет...
7 Garikk
 
18.08.15
12:44
чтото я тоже запутался
8 Про100Филя
 
18.08.15
13:05
(2) нужно создать функцию, которая наследует эти свойства?

Чтобы имя класса было равно имени функции?
9 Serginio1
 
18.08.15
13:42
10 D_Pavel
 
18.08.15
14:04
(8) Без разницы какое имя у функции. Главное чтобы ее прототип равнялся моему объекту.
11 Гёдза
 
18.08.15
14:30
а просто имя функции = имя переменной объекта?
по крайней мере в 1с такое на ура проходит
12 qwerty2469
 
18.08.15
14:45
Наследование на прототипах

function A(obj) {
    this.i = obj.i;
};
A.prototype = {
    constructor: A
};

function B(obj) {
    A.call(this, obj);
};
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

Основной код
var b = new B({i : 1});
alert(b.i); // 1
13 D_Pavel
 
18.08.15
16:11
(11) не получилось.

(12) b - не функция, а должна быть функция.
14 qwerty2469
 
18.08.15
17:24
(13)
var o = {i :2};
var f = function() {alert(1);};
for(p in o) // Цикл по свой­ст­вам
    f[p] = (o[p]);
f(); // 1
alert(f.i); //2
15 qwerty2469
 
18.08.15
17:25
По сути функции это тот же объект, т.е. ей можно добавлять свойства
16 beaver1971
 
18.08.15
18:49
(2)
    function constr() {
        var O = {};
        O = function () {return O.aaa}
        O.aaa = 2;
        O.bbb = function(ccc) { O.aaa = ccc;};
        return O;
    
    };

    var newObj1 = new constr();
    var newObj2 = new constr();

    newObj1.aaa = 10;
    newObj2.aaa = 20;
    alert(newObj1() + ":" + newObj2()); // 10:20

    newObj1.bbb(30);
    newObj2.bbb(40);
    alert(newObj1() + ":" + newObj2()); // 30:40

    newObj1.bbb = function(ccc) {this.aaa = ccc * 2;};
    newObj1.bbb(25);
    newObj2.bbb(60);
    alert(newObj1() + ":" + newObj2()); // 50:60


PS. функцией объект объявляем до того как начинаем "дорисовывать" свойства....
17 D_Pavel
 
19.08.15
10:20
(14) Тут объект не стал прототипом функции, а только свойства скопировались. Не пойдет.
18 D_Pavel
 
19.08.15
10:22
(16) А где тут установка другого объекта как прототипа этой функции?
19 qwerty2469
 
19.08.15
12:10
(18)
var o = {i :2};
for(p in o)
    Function.prototype[p] = o[p];
var f1 = new Function('','alert(1)');
f1(); // 1
alert(f1.i); //2

Но проблема в том, что если создать f2 = new Function() он будет иметь тот же прототип, что и f1.
20 D_Pavel
 
20.08.15
06:34
(19) продолжу твой код:

o.i = 3;
alert(f1.i); //2, а не 3

Не годится. Свойства объекта скопировались в прототип функции, но не сам объект стал прототипом функции.
21 D_Pavel
 
20.08.15
06:40
Должно быть типа того:

var o = {i :2};
var f1 = function(){    alert(f1.i);    }
f1.__proto__ = o;
o.i = 3;
f1(); //3
22 Asmody
 
20.08.15
10:15
(21) Так не получится.
Объект, который получается из new fff() не есть сама fff.
23 Asmody
 
20.08.15
10:35
кстати, (21) работает в хроме.
24 D_Pavel
 
20.08.15
11:56
(22) какой еще new fff() ?

АП!
25 D_Pavel
 
21.08.15
06:20
Ап
26 Asmody
 
21.08.15
07:53
вот ты упоротый!  посмотри, как сделано в jquery.
27 D_Pavel
 
21.08.15
07:56
(26) Не груби! Если не знаешь ответ на мой вопрос, лучше ничего не пиши.
28 eklmn
 
гуру
21.08.15
09:26
а обязательно яваскрпт?
просто на питоне легко )
29 Локи-13
 
21.08.15
09:37
(0) а нафига?
30 Локи-13
 
21.08.15
09:41
кстати в (9) я думаю исчерпывающий ответ
31 D_Pavel
 
21.08.15
10:02
(28) Нужно именно яваскрипт. Потому что это вопрос на углубленное знание яваскрипт.

(29) Хочу научиться использовать яваскрипт на 100%. Пока могу только на 99%.

(30) Я думаю там нет исчерпывающего ответа.
32 Локи-13
 
21.08.15
10:11
(31) Понятно... бьемся головой о стену, чтобы проверить прочность.
33 D_Pavel
 
21.08.15
10:26
(32) Точно
34 Serginio1
 
21.08.15
10:31
35 Serginio1
 
21.08.15
10:31
А нам сообщишь о своих изысканиях
36 D_Pavel
 
21.08.15
10:36
(34) регистрироваться еще... Нафиг надо. Мне одного форума хватает.
37 Serginio1
 
21.08.15
10:51
(36) Так, что толку если ты ответ на свой вопрос не получаешь. Задавать вопросы надо там, где больше специалистов. Это форум не Вэб программистов.
38 D_Pavel
 
21.08.15
10:55
(37) С чего ты взял что это форум не веб программистов? Это форум на любые темы. Посмотри какие секции тут есть. "Веб-мастеринг", например.
39 Serginio1
 
21.08.15
10:59
(38) Поверь на других форумах уровень вэб программисто значительно выше.
На http://stackoverflow.com практически можно найти все ответы на вопросы, но нужно знать английский, либо пользоваться переводчиком. Ты попробуй. Зарегистрироваться не большая проблема.

И посмотри какая активнось на данном форуме по вэб мастерингу и на других
http://www.forum.mista.ru/index.php?section=web
40 D_Pavel
 
21.08.15
12:37
(39) Попробовал. На stackoverflow какие-то ламеры сидят. Вместо ответа на вопрос пытаются блеснуть знаниями элементарных основ яваскрипта и лайкают друг друга.
41 D_Pavel
 
21.08.15
13:50
Разобрался в общем. Плохо что никто не догадался.

var o = {i :2};
var f1 = function(){    alert(f1.i);    }
//f1.__proto__ = o;
Object.setPrototypeOf(f1, o);
o.i = 3;
f1(); //3
42 Serginio1
 
21.08.15
14:12
По мне так значительно проще юзать TypeScript
http://typescriptrus.blogspot.ru/
43 Serginio1
 
21.08.15
15:48
44 D_Pavel
 
22.08.15
05:21
А мне проще юзать питон. Но это не относится к данному вопросу.
45 Asmody
 
22.08.15
11:14
(41) этот метод введен только в ES6. Поддерживается не всеми браузерами. Есть пара полифилов, но и они не полностью кроссбраузерные.
46 Asmody
 
22.08.15
11:19
47 Serginio1
 
22.08.15
17:30
(44) В питоне есть инструменты для генерации JavaScript?
https://ru.wikipedia.org/wiki/TypeScript
48 Asmody
 
22.08.15
18:44
49 Serginio1
 
22.08.15
22:28
(48) Я так понимаю, что у питона достаточно плохо со статической типизацией и выводом типа.
Прелесть TypeScript это как раз статическая типизация вывод типа и как следствие intellisense и контроль на уровне компиляции. Чего кстати в 1С сильно не хватает.
50 Asmody
 
22.08.15
22:39
(49)  в питоне динамическая типизация от рождения. но это ему не мешает.
51 Serginio1
 
22.08.15
23:08
(50) Многие хотят статическую типизацию
http://habrahabr.ru/company/mailru/blog/242305/

Как впрочем и в 1С.
В TypeScript всегда можно привести к any и работать с двойной диспетчеризацией.
52 Asmody
 
22.08.15
23:46
(51) Есть полно языков со статической типизацией. Всегда есть выбор.
53 Serginio1
 
23.08.15
00:48
(51) Мы сейчас говорим об типизированном JavaScript.
Какой есть выбор?
http://javascript.ru/forum/misc/54953-typescript-vs-es6.html
54 Serginio1
 
23.08.15
01:19
55 Serginio1
 
23.08.15
01:22
56 Draziw
 
23.08.15
03:20
(0) Объекты и методы(функции) это несколько разные сущности.
Объект - это человек, у него есть ноги (параметры), функция у него - ходить.
Ты хочешь чтобы у "ходить" были ноги.
Функции не содержат параметры, так не бывает.
57 Serginio1
 
23.08.15
09:26
(56) в JS можно
Гибридные типы
Из-за гибкой основы JavaScript возможна работа с такими объектами, которые являются комбинацией нескольких типов. С такими объектами можно работать и как с объектом и как с функцией.
interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

var c: Counter;
c(10);
c.reset();
c.interval = 5.0;
58 Рэйв
 
23.08.15
09:28
(0)Прототип- это описание?. Ты с терминами разберись сначала
59 Рэйв
 
23.08.15
09:28
Описание обычно вверху с формальными параметрами
60 D_Pavel
 
24.08.15
06:40
(58) Прототип - это родитель. Что именно тебе не понятно в терминах? Спрашивай более конкретно, объясню.