Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Классы


Автор: нуп 10.9.2010, 00:35
Есть классы парочка классов
Код

        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 

Автор: CruorVult 10.9.2010, 10:17
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());

Автор: нуп 10.9.2010, 10:26
Я не хочу ничего возвращать..почему когда  class_1.test  вызывает функцию class_2.test_2 меняется this в классе class_2 ?

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


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

Объясните что Вам нужно сделать?

Автор: нуп 10.9.2010, 10:44
Посмотрите на мой пример, this.id  в функции class_2.test_2 не тот. При алерте  this.id равен undefined. Я не знаю почему это происходит 

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

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

Автор: нуп 10.9.2010, 10:51
Так не годится  smile 

Автор: CruorVult 10.9.2010, 10:56
можно еще так:
Код

   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()');

Автор: нуп 10.9.2010, 10:57
Вы не поняли. Мне нужно чтобы в функции class_2.test_2 была доступна this smile Объектов будет же много 

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

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

Автор: mxt 10.9.2010, 15:41
много вариантов. тут проще всего с замыканием:

Код



        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

Автор: нуп 10.9.2010, 16:16
Да пришлось вызывать через другую функцию. Всем спасибо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)