在绑定函数中访问对象值

Access object value within bound function

我正在尝试创建一个对象并附加一个相应的 DOM 元素,我想将触发函数的事件绑定到该元素。 我的问题是:是否可以在该绑定函数中访问对象的初始值?

function Bloc() {

    this.DOMel;
    this.ID = Math.round( Math.random() * 1000);
    this.startPosX;


    this.init = function() {
        $('#blocs-container').append( '<div class="bloc" data-id="' + this.ID + '"></div>' );

        this.DOMel = $('.bloc[data-id="' + this.ID + '"]');

        this.DOMel.bind('touchstart', function(e) {
            this.startPosX = e.originalEvent.touches[0].pageX;
        });
    }

}

例如,我想在绑定到 touchstart 事件的函数中访问和修改 this.startPosX。

可能吗?如果没有,我该如何解决?

谢谢!

你失去了上下文。试试这个:

this.DOMel.bind('touchstart', function(e) {
    this.startPosX = e.originalEvent.touches[0].pageX;
}.bind(this));

你可以利用这个:

function Bloc() {
   var self = this;

   self.startPosX;

}

然后在你的函数中调用它 self.startPosX.

Why the above works?

在变量 self 中存储函数 Bloc 的实例。当你进入你分配给 this.init 的匿名函数时,上下文发生变化并且 this 指向这个函数的实例。因此,您无权访问存储到外部上下文的变量,使用 this。但是,使用上述技巧,您可以使用 self 访问 startPosX 所在的上下文。

我将 this.startPosX 更改为 var startPosX 后,它也开始工作了,我猜 Christos 我解释了它工作的基本原理。此外,在我更改以下行之前,我无法让 touchstart 事件工作:

 this.DOMel.bind('touchstart', function(e) { 

 $('.block[data-id="blocks"]').bind('touchstart', function(e) {

请注意选择器略有不同,因为我创建了一些 div 用于测试目的。一旦移动模拟器用于 touchstart 事件,Fiddle 就会工作。