Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как быть с объектами? 
:(
    Опции темы
maxkazar
Дата 29.1.2004, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.1.2004
Где: Таганрог

Репутация: нет
Всего: нет



Как быть с объектами? Необходимо написать полноценный объект на клиентском скрипте...ну например объект меню...Возможно ли это?
PM MAIL ICQ   Вверх
Dr.Death
Дата 29.1.2004, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Да.
делаешь функцию, которая будет конструктором твоего объекта.
Код

var count=0
function myobj(name)
{
count++
this.id=count
this.name=name
this.change_name=change_name
}
function change_name(newname)
{
this.name=newname
}
var obj=new myobj("test")
alert(obj.name)
obj.change_name("test2")
alert(obj.name)

Вроде так

Это сообщение отредактировал(а) Dr.Death - 29.1.2004, 12:07


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
maxkazar
Дата 29.1.2004, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.1.2004
Где: Таганрог

Репутация: нет
Всего: нет



Это все понятно. А как насчет наледования?
PM MAIL ICQ   Вверх
Sardar
Дата 30.1.2004, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



JavaScript это объектно-ориентированный язык с механизмом(способом мышления...) прототипов, через который реализуется наследование и динамическое добавление/изменение полей и методов обьектов.
Обьекты можно создавать только от функций, сама функция выступает в роли конструктора. Повторю за Dr.Death
Код

function myobj(arg) {
if(!this.t) this.t=0;
this.t++;
alert(this.t);
}
myobj(); //выведет 1
obj1=new myobj(); //выведет 1
myobj();//выведет 2
obj2=new myobj(); //выведет 1

alert(window.t); // выведет 2
alert(t); //выведет 2

myobj.prototype.a="вот это да!!!";
obj2.a="да ну, просто все это :)";
alert(obj1.a);
alert(obj2.a)

Если myobj() вызывается как простая функция, то в this "лежит" глобальный контекст имен, т.е. создастся переменная t. При вызове оператором new создается "этакая структура-контейнер" представляющая локальный контекст имен.
Поле prototype функции задает поля и методы для всех обьектов созданных от этой функции. Через prototype можно динамически добавить поле/метод к обьекту, изменения коснутся всех обьектов порожденных функцией, вплоть до созданных ранее. Т.е. функция как бы создает тип(а ля class), а в prototype лежит описание типа(внутренняя реализация класса).

Наследование
В JavaScript - язык с динамическими типами(нет строгих типов), т.е. наследование для приведения к единому типу отпадает.
Конечно наследование нужно для использования общего кода в разных "классах".
Рассмотрим два типа наследования
1) для методов разных типов задаем одну реализацию
2) реально наследуем от типа дабы новый тип затрагивали все изменения prototype родительского типа.
Первый способ - один код для разных типов
Код

function test(arg) { //"определение типа" test
this.a=arg;
this.meth=mymethod;
}
function test2(arg,arg2) { //"определение типа" test2
this.a=arg;
this.b=arg2;
this.method=mymethod;
}
function mymethod(arg) { //реализация общего метода
alert(this.a);
if(this.b) alert(this.b); //мы можем догадыватся кто это
}
obj1=new test("один");
obj2=new test2("два","три");
obj1.meth();
obj2.method();


Второй способ - ближе к "настоящему" наследованию
Код

function test(arg) {
this.a=arg;
this.method=mymethod; //смотри выше
}
function test2(arg,arg2) {
this.b=arg2;
test.apply(this, test2.arguments); //нечего переписывать код
}
function mymethod(arg) {
alert(this.a);
if(this.b) alert(this.b);
}
test2.prototype=new test(); //а вот тут "наследование"

obj1=new test("один");
obj2=new test2("два","три");

test.prototype.tt="во дает!"; //задаем для типа test новое поле tt

alert(obj1.tt);
alert(obj2.tt);
obj1.tt="вот такие помидоры..."; //но переменная
alert(obj2.tt); //продолжает быть личной
obj3=new test2("Фамилия","Имя");
alert(obj3.tt); //переменная имеет начальное значение, определенное в prototype

Метод Function.apply(name_context, array_of_args) вызывает функцию задавая ей контекст имен, т.е. func.apply(this,...) заставляет функцию func изменять текущий контекст имен.
Задавая в prototype некий обьект мы ссылаемся на этот обьект и следовательно на тип этого обьекта, а значит все изменения с его типом отразятся и на нас.

Вот и вышло - наследование smile.gif.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.