Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript Классическое наследование (https://javascript.ru/forum/misc/4652-javascript-klassicheskoe-nasledovanie.html)

Riim 11.08.2009 15:18

Ну, я не знаю, давай конкретней, может, как замыкания работают не знаешь?

zzz 11.08.2009 15:20

Вроде бы знаю поправь если что. Замыкания эта такая технология которая позволяет читать функции переменные из внешних по отношению к ней функций когда родительская функция уже закончила работу и сохранять их. (прочитал из той же книжки)

Riim 11.08.2009 15:22

Цитата:

Сообщение от zzz
(прочитал из той же книжки)

И понял что прочитал?

Самое бредовое объяснение, сожги ее наконец.

zzz 11.08.2009 15:25

Не хорошо жечь книжки за 500 рублей это раз и два понял но не полностью например есть оператор цикла который каждый раз делает ++переменная и например работает пока переменная<=20 а систма замыканий сохранеят не переменная==20 а нужное число. Только я не понял почему ведь каждый раз эта переменная должна заменятся и так пока до 20 и как сделать чтобы эта сис замыканий сохранила имеено нужное число например 15

Riim 11.08.2009 15:29

замыкания: http://javascript.ru/basic/closure
наследование: http://javascript.ru/tutorial/object/inheritance

и много других интересных статей: http://javascript.ru/doctree

Потом снова вернешься к своему примеру.

zzz 11.08.2009 15:31

http://javascript.ru/tutorial/object/inheritance уже пару часов читаю не как не могу понять
function extend(Child, Parent) {
var F = function() { }
F.prototype = Parent.prototype
Child.prototype = new F()
Child.prototype.constructor = Child
Child.superclass = Parent.prototype
}

в чём отличие prototype и [[prototype]]

Riim 11.08.2009 15:44

Цитата:

Сообщение от zzz
уже пару часов читаю не как не могу понять

За пару часов конечно не получится.

zzz 11.08.2009 15:46

Интересно у всех так вначале?

Dmitry A. Soshnikov 11.08.2009 15:47

Цитата:

Сообщение от zzz
в чём отличие prototype и [[prototype]]

[[prototype]] - прототип объекта (неявная, скрытая ссылка, разорвать эту связь нельзя)

prototype - свойство конструктора объекта, первоначально указывающее на тот же объект, что и [[prototype]], т.е. .constructor.prototype - явная ссылка на прототип объекта, однако, это свойство можно перезаписать.

Riim 11.08.2009 15:51

На будущее:
Во многих статьях [[prototype]] == __proto__

zzz 11.08.2009 15:52

__proto__ работает только в gecko браузерах поэтому указывать его так не корректно

Riim 11.08.2009 15:53

Цитата:

Сообщение от zzz
__proto__ работает только в gecko браузерах

Все верно, в остальных браузерах он скрыт.

Цитата:

Сообщение от zzz
поэтому указывать его так не корректно

Почему?

zzz 11.08.2009 15:54

Ну напишет так какой-нибудь новичок а он в ИЕ не работает она расстроится и повесится

Kolyaj 11.08.2009 16:00

Цитата:

Сообщение от zzz
Ну напишет так какой-нибудь новичок а он в ИЕ не работает она расстроится и повесится

Такого не жалко.

zzz 11.08.2009 16:01

Вы говорите что [[prototype]] и prototype указывают на одно и тоже
но в это статье про наследование при создании функции
[[prototype]]==function.prototype
a prototype==new object

Kolyaj 11.08.2009 16:02

zzz,
чтобы не пришлось повторятся, вот это тему почитайте http://javascript.ru/forum/misc/3070...avascript.html

zzz 11.08.2009 16:09

Ура поздравте меня я понял этот код
function extend(Child, Parent) {
    var F = function() { }
    F.prototype = Parent.prototype
    Child.prototype = new F()
    Child.prototype.constructor = Child
    Child.superclass = Parent.prototype    
}

а точнее первые три строчки функции екстенд (но веря статье это уже должно работать)

B~Vladi 11.08.2009 18:05

а я вот них тут не понимаю:blink:
Но вроде это круто...

zzz 11.08.2009 18:13

Понял весь код
function extend(Child, Parent) {
var F = function() { }
F.prototype = Parent.prototype
Child.prototype = new F()
Child.prototype.constructor = Child
Child.superclass = Parent.prototype
}

Vladi го со мной читать
http://javascript.ru/tutorial/object/inheritance

B~Vladi 11.08.2009 18:14

Цитата:

Сообщение от zzz
Vladi го со мной читать

Go!:)

Zeroglif 11.08.2009 22:17

Цитата:

Сообщение от zzz (Сообщение 26453)
Дуглас Крокфорд. это главный архитектор по JavaScript в Yahoo. но и без этого, имно, ему можно ставить памятник уже за один только вот этот кусок кода:

function object(o) {
function F() {}
F.prototype = o;
return new F();
}

Этот код Lasse Reichstein Nielsen-а. Ставьте ему памятник. Он его показал в c.l.j где-то в 2003 году и каждый год повторял в своих сообщениях. Много позже Крокфорд взял этот код, переименовал под себя и безо всяких упоминаний об авторе идеи (забыл, бывает, возраст) выдал более широкому кругу читателей своего сайта. Он, кстати, прекрасно знает об этом и даже как бы извинялся, что не упомянул, когда c.l.j в очередной раз достали словосочетанием "паттерн Крокфорда"...

JSprog 16.08.2009 12:35

if(depth)
проверка существует ли переменная
function.prototype.method
добавляет новый метод всем функциям.

Kolyaj 16.08.2009 22:05

Цитата:

Сообщение от JSprog
проверка существует ли переменная

// Проверим, существует ли переменная foo
if (foo) { // Что за фигня? Почему ошибка?
}

JSprog 17.08.2009 08:52

Можно проверять только локальные переменные=)
А так isset(если он в JS есть а то у меня от этого PhP каша в голове)

Kolyaj 17.08.2009 12:07

Цитата:

Сообщение от JSprog
Можно проверять только локальные переменные=)

Если вы написали
var a;
то переменная a уже существует, нечего тут проверять.

JSprog 17.08.2009 12:12

Не всегда, например функция создаёт переменную, так можно проверить сработала функция или нет

Kolyaj 17.08.2009 12:29

JSprog,
код примера.

JSprog 17.08.2009 12:35

Ну да переменная же локальная определить не как =)
Ну для чего-то же есть такая возможность...


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