|
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
|
(33) Так задай этот вопрос на профильном форуме
http://stackoverflow.com/questions/tagged/javascript http://ru.stackoverflow.com/questions/tagged/javascript http://www.cyberforum.ru/javascript-prototype/ http://rsdn.ru/?forum/web |
|||
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) Прототип - это родитель. Что именно тебе не понятно в терминах? Спрашивай более конкретно, объясню.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |