【问题标题】:How to get properties of the object subjected to event using Fabric.js?如何使用 Fabric.js 获取受事件影响的对象的属性?
【发布时间】:2013-04-01 17:58:03
【问题描述】:

使用 Fabric.js 1.1.6,我有以下内容:

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 属性?
  • 如果是,我该怎么做?
  • 如果不是,关于如何从事件函数内部修改 rect 属性的任何建议?

提前谢谢你!

--

更新:@plalx 正确回答了上述问题,但实际上我在更大的背景下有这个问题:

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

好吧,在后一种情况下,我不能只在函数内部使用 this.rect,因为 this 指的是函数,而不是 SomeClass。

现在怎么样,以上三个问题的答案是什么?

【问题讨论】:

  • 如果一个函数在创建时引用了范围内的某些变量,它将“关闭”这些变量。这意味着它们将可供它访问和修改,即使它们在您调用它时不在范围内。

标签: javascript events fabricjs


【解决方案1】:

"是否可以从内部检索和修改矩形属性 事件调用的函数?”

这不仅是可能的,而且非常简单;)您应该阅读 JavaScript 中的 closures

对于问题 #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;
    });
}

【讨论】:

  • 好的,这回答了我的问题,但实际上我在更大的背景下拥有这个东西......请查看编辑
  • 很抱歉,但我认为我在更新中提到的内容并不重要...... JavaScript 对我来说很不寻常(我正在使用 C# 和 C 系列)。
  • @Girardi,是的,我能理解你为什么觉得它很麻烦,就像我说的阅读闭包和 OO JavaScript ;)
  • #2 是一种非常聪明的方法,它利用了在执行var obj1 = obj2 时几乎总是传递给变量的引用!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
相关资源
最近更新 更多