2013-04-10 2 views
0

Использование Fabric.js 1.1.6, я следующее:Как получить свойства объекта, подверженного событию, используя Fabric.js?

var rect = new fabric.Rect({}); 
rect.on('moving', function(obj) { 
    // I want to retrieve and set properties from the 
    // object rect from inside this event function 
}); 
  • Можно ли извлекать и изменять rect свойства внутри функции, вызываемой этим событием?
  • Если да, то как это сделать?
  • Если это не так, любые предложения о том, как мне изменить свойства прямоугольника внутри функции события?

Заранее благодарю вас!

-

Update: выше вопрос правильно ответил @plalx, ​​но я на самом деле это в более широком контексте:

function SomeClass() 
{ 
    this.rect = new fabric.Rect({}); 
    this.rect.on('moving', function(obj) { 
     // here, this.rect is undefined 
    }); 
} 

Ну, в последнем контексте, я могу 't использовать this.rect внутри функции, потому что this ссылается на функцию, а не на SomeClass.

Как насчет того, каковы ответы на три вопроса выше?

+1

Если функция относится к некоторым переменным, которые находятся в объеме, когда он будет создан, он будет «закрыть над» этими переменными. Это означает, что они будут доступны для доступа и изменения, даже если они не находятся в области действия при его вызове. –

ответ

3

«Возможно ли получить и изменить свойства прямых внутри функции, вызванной событием?»

Не только это возможно, но это очень просто;) Вы должны прочитать о closures в JavaScript.

Для вопроса # 1

var rect = new fabric.Rect({}); 
rect.on('moving', function(obj) { 
    rect.someProperty = 'test'; 
}); 

Для вопроса # 2

function SomeClass() { 
    var rect = this.rect = new fabric.Rect({}); 

    this.rect.on('moving', function(obj) { 
     // here, this.rect is undefined 
     rect.someProperty; 
    }); 
} 
+0

ok, это отвечает на мой вопрос, но у меня есть эта вещь в большем контексте ... см. Редактирование, пожалуйста – Girardi

+0

Прошу прощения, но я не думал, что то, что я упомянул в обновлении, будет иметь значение ... JavaScript для меня довольно необычно (я использую семьи C# и C). – Girardi

+0

@ Girardi, Да, я могу понять, почему вы считаете это хлопотным, как я сказал, читал о закрытии и OO JavaScript;) – plalx