我知道在这个问题上有很多关于堆栈的类似问题,但对于我的生活,我无法理解代码中的问题。
尝试在javascript中升级,以便任何建议都会有所帮助。我创建了一个管理滑块功能的对象。
var gMapSlider = {
mapSlideShow: false,
// why doesnt current place update when passed in
newMarker: null,
oldMarker: null,
mapSlideIn: function() {
this.contentSlide
$('#placeDetails').animate({right: '0'});
this.mapSlideShow = true;
},
mapSlideOut: function(func) {
if (typeof(func) != "function") func = function() {};
$('#placeDetails').animate({right: '-320px'}, null, null, func());
this.mapSlideShow = false;
},
mapSlideToggle: function() {
(this.mapSlideShow) ? this.mapSlideOut() : this.mapSlideIn();
},
contentSlide: function() {
if (this.newMarker) $('h1', '#placeDetails').text(this.newMarker.title);
},
mapSlide: function(marker) {
this.newMarker = marker;
if (this.oldMarker === this.newMarker) { //same marker showing
this.mapSlideToggle();
}
else if (this.oldMarker !== this.newMarker && !this.mapSlideShow) { //diff marker showing
this.contentSlide(marker);
this.mapSlideIn();
}
else if (this.oldMarker !== this.newMarker && this.mapSlideShow) {
var self = this;
console.log(self) //returns this object
this.mapSlideOut(function() {
console.log(self); // returns this object
self.contentSlide(this.newMarker);
self.mapSlideIn;
}).bind(self); // cannot read property 'bind' of undefined
}
this.oldMarker = this.newMarker;
}
}
几个问题
1)问题在于我的gMapSlider.mapSlide函数。如果我调用mapSlide函数并且最后一个else if语句适用,我得到一个无法读取绑定错误的属性。我有谷歌,但没有发现任何真正的相关性。任何人都可以帮助我在这里做错了。
2)这是管理命名空间内功能的最佳方式。我看到的大多数代码示例都在全局命名空间中使用函数,所以如果建议在Javascript中创建这样的对象,需要做一些澄清吗?
编辑@torazaburo谢谢,感觉像一个合适的新手,这就是问题所在。把它作为答案,我将解决。有关代码架构的任何建议吗?
答案 0 :(得分:1)
this.mapSlideOut(function() {
console.log(self); // returns this object
self.contentSlide(this.newMarker);
this.mapSlideIn;
}).bind(self);
应该在函数对象上调用 bind()
,但是你在函数调用的结果上调用它
使用它:
this.mapSlideOut.bind(self,function() {
console.log(this); // returns this object
this.contentSlide(this.newMarker);
this.mapSlideIn;
});
同样,上面的调用将返回对该函数的引用,并将其绑定到self