这个和javascript中的闭包(在paper.js中工作)

时间:2015-01-19 02:02:09

标签: javascript closures this paperjs

我仍然把头缠在封闭处。

我正在使用Paper.jspaperscript开展项目。我正在尝试创建具有距离度量的线段,该距离度量在移动时保持在段的中心。

不是简单地编写代码来分别移动中心和线(这很简单),我一直在看是否有可能移动线并让中心跟随。

事实证明这很困难。它可能有几个问题,但是现在this是我当前的bugaboo。他们现在设置它的方式,this在调用函数时引用全局对象,这当然不是我想要的。但是我无法弄清楚如何创造我想要的东西,这当然是来自“重量”的一个参考资料。元素到'线'元件。

我该如何正确地做到这一点?

edge = new Group({
    children: [
        new Path.Line({
            from: gn.position,
            to: event.point,
            strokeColor: 'maroon',
            name: 'line'
        }),
        new PointText(function (){
            return {
                position: function () {
                    return this.previousSibling.position;
                }(),
                content: function () {
                    return this.previousSibling.length.toString();
                }(),
                name: 'weight'
            }
        }())
    ]
});

1 个答案:

答案 0 :(得分:2)

为了提供更好的结构,并绑定this引用,您可以开始定义构造函数:

function PointTextContent(name) {
  this.position = function () {
    return this.previousSibling.position;
  }.bind(this);
  this.content = function () {
    return this.previousSibling.length.toString();
  }.bind(this);
  this.name = name;

  PointText.call(this, this);
}

PointTextContent.prototype = PointText;

然后更改代码以实例化新对象。

edge = new Group({
    children: [
        new Path.Line({
            from: gn.position,
            to: event.point,
            strokeColor: 'maroon',
            name: 'line'
        }),
        new PointTextContent('weight')
    ]
});

注意:我更改了positioncontent成为函数,我发现它们会立即在原始代码中调用。