Javascript和原型程序
我正在尝试写一个幻灯片放映的脚本。我可以用函数实现,但我想用原型方法。我很难弄清楚的是程序。以下是我尝试做的Javascript和原型程序,javascript,oop,prototype,Javascript,Oop,Prototype,我正在尝试写一个幻灯片放映的脚本。我可以用函数实现,但我想用原型方法。我很难弄清楚的是程序。以下是我尝试做的 var displayVars = { slide: '', thumb: '' } //setup display display = function(slide,thumb) { displayVars.slide = $(slide); displayVars.thumb = $(thumb); // set slider w
var displayVars = {
slide: '',
thumb: ''
}
//setup display
display = function(slide,thumb) {
displayVars.slide = $(slide);
displayVars.thumb = $(thumb);
// set slider width
}
display.prototype.play = function() {
// move slide to this location
display.hightlight();
}
display.prototype.hightlight = function() {
// add border to element
}
$(function() {
newdis = new display('.show-slide','.window-thumbs');
displayVars.timer = setTimeout(newdis.play,500);
});
如果您注意到在play函数中,我想调用highlight方法。我真正想要的是每次调用play函数时都运行highlight函数。我不能让我的头去看看如何做到这一点,因为“display”或“this”不允许我访问highlight函数。问题不在于原型函数的内部,而在于设置超时处理程序的方式
displayVars.timer = setTimeout(function() { newdis.play(); }, 500);
然后,您可以在“播放”功能中使用此:
display.prototype.play = function() {
// move slide to this location
this.hightlight();
}
函数和任何类型的对象之间都没有内在的“成员”关系。对象属性可以引用函数,但唯一有意义的时间是通过对象属性引用进行函数调用时。由于您没有调用该函数,而只是获取对它的引用以传递给“setTimeout()”,因此没有任何东西可以设置this
的值。通过将其包装在通过对象引用显式调用“play”的匿名函数中,可以正确设置此
另一种方法是在较新的浏览器中使用“bind()”函数:
displayVars.tinmer = setTimeout(newdis.play.bind(newdis), 500);
这将或多或少与匿名函数具有相同的效果(有一些额外的微妙之处,在大多数情况下不会有太大的区别)。问题不在于原型函数的内部,而在于设置超时处理程序的方式
displayVars.timer = setTimeout(function() { newdis.play(); }, 500);
然后,您可以在“播放”功能中使用此:
display.prototype.play = function() {
// move slide to this location
this.hightlight();
}
函数和任何类型的对象之间都没有内在的“成员”关系。对象属性可以引用函数,但唯一有意义的时间是通过对象属性引用进行函数调用时。由于您没有调用该函数,而只是获取对它的引用以传递给“setTimeout()”,因此没有任何东西可以设置this
的值。通过将其包装在通过对象引用显式调用“play”的匿名函数中,可以正确设置此
另一种方法是在较新的浏览器中使用“bind()”函数:
displayVars.tinmer = setTimeout(newdis.play.bind(newdis), 500);
这将或多或少与匿名函数具有相同的效果(有一些额外的微妙之处,在大多数情况下不会有太大的区别)。此
确实允许您调用“highlight”函数。此
确实允许您调用“highlight”函数。非常感谢你,我花了好几个小时试图解决这个问题。非常感谢你,我花了好几个小时试图解决这个问题。