我试图创建一个对象并附加一个相应的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。
有可能吗?如果没有,我该如何解决呢?
谢谢!
答案 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即可运行。