Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript和原型程序_Javascript_Oop_Prototype - Fatal编程技术网

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”函数。非常感谢你,我花了好几个小时试图解决这个问题。非常感谢你,我花了好几个小时试图解决这个问题。