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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы, Классы 
V
    Опции темы
нуп
Дата 10.9.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Есть классы парочка классов
Код

        function class_1()
    {
        this.id = 'tratata';
    }
    class_1.prototype.test = function(func)
    {
        func();
    }
    
    function class_2()
    {
        this.id = 'lalala';
    }
    class_2.prototype.test_2 = function()
    {
        alert(this.id);
    }

И вызов
Код

       var c2 = new class_2();
    var c1 = new class_1();
    c1.test(c2.test_2);

В итоге я получаю значение undefined smile , вместо  'lalala'. Может кто подскажет почему так происходит? smile 
PM MAIL   Вверх
CruorVult
Дата 10.9.2010, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



1)c2.test_2 это свойства объекта c2, метод вызывается: c2.test_2()
2)если Вы хотите вернуть значение то нужно использовать return this.id а не  alert(this.id).
В общем как-то так:


Код

function class_1()
    {
        this.id = 'tratata';
    }
    class_1.prototype.test = function(func)
    {
        alert(func);
    }
    
    function class_2()
    {
        this.id = 'lalala';
    }
    class_2.prototype.test_2 = function()
    {
        return this.id;
    }


Код

    var c2 = new class_2();
    var c1 = new class_1();
    c1.test(c2.test_2());


Это сообщение отредактировал(а) CruorVult - 10.9.2010, 10:18
PM MAIL Skype   Вверх
нуп
Дата 10.9.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Я не хочу ничего возвращать..почему когда  class_1.test  вызывает функцию class_2.test_2 меняется this в классе class_2 ?
PM MAIL   Вверх
CruorVult
Дата 10.9.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



что значит 
Цитата(нуп @  10.9.2010,  10:26 Найти цитируемый пост)
меняется this в классе class_2


this это и есть class_2  если вызывается внутри самого себя. 

Объясните что Вам нужно сделать?
PM MAIL Skype   Вверх
нуп
Дата 10.9.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Посмотрите на мой пример, this.id  в функции class_2.test_2 не тот. При алерте  this.id равен undefined. Я не знаю почему это происходит 
PM MAIL   Вверх
CruorVult
Дата 10.9.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Цитата(нуп @  10.9.2010,  10:44 Найти цитируемый пост)
Я не знаю почему это происходит 

ааа, теперь увидел.
В общем когда Вы передаете метод другому классу, this не будет работать т.к. вызов осуществляется извне класса. Чтобы заработало нужно указать вместо  alert(this.id) - alert(с2.id)

Это сообщение отредактировал(а) CruorVult - 10.9.2010, 10:51
PM MAIL Skype   Вверх
нуп
Дата 10.9.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Так не годится  smile 
PM MAIL   Вверх
CruorVult
Дата 10.9.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



можно еще так:
Код

   function class_1()
    {
        this.id = 'tratata';
    }
    class_1.prototype.test = function(func)
    {
       eval(func);
    }
    
    function class_2()
    {
        this.id = 'lalala';
    }
    class_2.prototype.test_2 = function()
    {
        alert(this.id);
    }
    
    var c2 = new class_2();
    var c1 = new class_1();
    c1.test('c2.test_2()');


Это сообщение отредактировал(а) CruorVult - 10.9.2010, 10:57
PM MAIL Skype   Вверх
нуп
Дата 10.9.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Вы не поняли. Мне нужно чтобы в функции class_2.test_2 была доступна this smile Объектов будет же много 
PM MAIL   Вверх
CruorVult
Дата 10.9.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Цитата(нуп @  10.9.2010,  10:57 Найти цитируемый пост)
Мне нужно чтобы в функции class_2.test_2 была доступна this

исправил очепятку.
PM MAIL Skype   Вверх
mxt
Дата 10.9.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



много вариантов. тут проще всего с замыканием:

Код



        function class_1()
    {
        this.id = 'tratata';
    }
    class_1.prototype.test = function(func)
    {
        func();
    }
    
    function class_2()
    {
        this.id = 'lalala';
    }
    class_2.prototype.test_2 = function()
    {
        alert(this.id);
    }



       var c2 = new class_2();
    var c1 = new class_1();
    c1.test(function(){ c2.test_2(); });




проще создавать сразу обертки.  посмотри как сделано в Mootools
--------------------
PM MAIL   Вверх
нуп
Дата 10.9.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Да пришлось вызывать через другую функцию. Всем спасибо  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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