访问绑定函数内的对象值

时间:2015-01-13 10:36:40

标签: javascript jquery object

我试图创建一个对象并附加一个相应的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。

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

谢谢!

3 个答案:

答案 0 :(得分:3)

你可以利用这个:

function Bloc() {
   var self = this;

   self.startPosX;

}

然后在函数内部将其称为self.startPosX

  

为什么上述工作?

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

答案 1 :(得分:1)

你失去了背景。试试这个:

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

答案 2 :(得分:0)

一旦我将this.startPosX更改为var startPosX,我也得到了它,我猜Christos我解释了它的工作原理。此外,在我更改以下行之前,我无法使touchstart事件生效:

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

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

请注意选择器略有不同,因为我创建了一些div用于测试目的。移动模拟器用于touchstart事件后,Fiddle即可运行。