Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   функция MoveTo() не корректно работает (https://javascript.ru/forum/events/49811-funkciya-moveto-ne-korrektno-rabotaet.html)

ДанилаDeep 29.08.2014 11:02

функция MoveTo() не корректно работает
 
Всем доброе утро! Не могу понять,хоть убей,почему в функцию не передаются параметры,вот код
function MyRectangle(x1,y1,x2,y2,x3,y3,x4,y4){
    this.cordx1 = x1;
    this.corxy1 = y1;
    this.cordx2 = x2;
    this.cordy2 = y2;
    this.cordx3 = x3;
    this.cordy3 = y3;
    this.cordx4 = x4;
    this.cordy4 = y4;
    this.draw = function(){
        ctx.beginPath();
        ctx.lineWidth = "10";
        ctx.strokeStyle = "blue";
        ctx.moveTo(this.cordx1,this.cordy1);
        ctx.lineTo(this.cordx2,this.cordy2);
        ctx.stroke();
    }
}

ctx.moveTo(this.cordx1,this.cordy1) не работает почему то, когда ей тут присваиваешь переменные,а если напрямую число присвоить то она работает. В то время как ctx.lineTo(this.cordx2,this.cordy2) работает и с переменными.
Помогите понять пожалуйста в чем беда...((

ДанилаDeep 29.08.2014 11:24

А если так передавать, то работает:
this.draw = function(x,y){
        ctx.beginPath();
        ctx.lineWidth = "10";
        ctx.strokeStyle = "blue";
        ctx.moveTo(x,y);
        ctx.lineTo(this.cordx2,this.cordy2);
        ctx.stroke();
    }


Как так????????Голову можно сломать!!!

MallSerg 29.08.2014 11:26

this в фунции .draw указывает на другой объект потому что это другая функция;

в функции function MyRectangle создай переменную через var и она будет доступна в функции .draw через замыкание
каждый вызов MyRectangle() будет создавать замыкание в котором и будет хранится уникальное значение в переменной var;

ДанилаDeep 29.08.2014 11:29

Цитата:

Сообщение от MallSerg (Сообщение 328054)
this в фунции .draw указывает на другой объект потому что это другая функция;

в функции function MyRectangle создай переменную через var и она будет доступна в функции .draw через замыкание
каждый вызов MyRectangle() будет создавать замыкание в котором и будет хранится уникальное значение в переменной var;

А почему же тогда ctx.lineTo(this.cordx2,this.cordy2) отрисовывает с верными координатами???

Подскажи пожалуйста,что значит замыкание,если не сложно черкани код


То это не работает

MallSerg 29.08.2014 11:34

В данном случае this используется в той же функции просто передача параметров функции.
в первом примере создается новая функция и уже внутри нее ты обращается к this

ДанилаDeep 29.08.2014 11:41

Цитата:

Сообщение от MallSerg (Сообщение 328059)
В данном случае this используется в той же функции просто передача параметров функции.
в первом примере создается новая функция и уже внутри нее ты обращается к this

Если не сложно,можно кодом обьяснить,а то я не догоняю,честно

Erolast 29.08.2014 14:02

Один раз ты используешь this в одной функции, второй раз - в другой. Один раз this имеет одно значение, второй - совершенно другое. Что непонятно?

ДанилаDeep 29.08.2014 14:21

Цитата:

Сообщение от Erolast (Сообщение 328080)
Один раз ты используешь this в одной функции, второй раз - в другой. Один раз this имеет одно значение, второй - совершенно другое. Что непонятно?

Почему тогда если:
function MyRectangle(x1){
	    this.cordx1 = x1;
	    this.draw = function(){
                alert(this.cordx1);
	    }
	}

Rectangle = new MyRectangle(10)
Rectangle.draw();

выводится 10, т.е. значение this.cordx1 ????


Если так не получается передать параметр , то как можно?опишите пожалуйста,если вы знаете, я правда замучался!!!!

Safort 29.08.2014 15:16

ДанилаDeep,
я спасу тебя! Присмотрись внимательно к этому куску кода, падаван:

this.corxy1 = y1;


Что ты видишь в нём?

ДанилаDeep 29.08.2014 15:22

Цитата:

Сообщение от Safort (Сообщение 328093)
ДанилаDeep,
я спасу тебя! Присмотрись внимательно к этому куску кода, падаван:

this.corxy1 = y1;


Что ты видишь в нём?

Спасибо мастер!!!!Вот действительно стоящий ответ!!!!!!Благодаря тебе, я снова преисполнен надеждой решить задачу!!!!!:dance:


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