JavaScript-JavaScript报错,TypeError: this._setPara is not a function

发布于 2016-12-15 01:34:53 字数 889 浏览 1375 评论 2

以下是一段获取元素位置,并通过判断index值,使其向左或向右运动的代码局部。在运行过程中报错,this._setPara is not a funtion...百思不得其解,请各位指教~多谢~

        _setPara : function(){
this._b = this.swContainer.css("left");
this._move();
},

moveLeft : function(){
this._setPara();
this.index++;
if(this.index == this.swCounter){
setTimeout(this.moveRight, this.swDuration);
}else{
setTimeout(this.moveLeft, this.swDuration);
}
},

moveRight : function(){
this._setPara();
this.index--;
if(this.index == 0){
setTimeout(this.moveLeft, this.swDuration);
}else{
setTimeout(this.moveRight, this.swDuration);
}
},

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交 2017-07-10 18:34:23

其实很简单就是一个 this 作用域的问题,新的标准规范里面有这个处理了,要是不考虑不支持 ES5 标准的浏览器的话,一般使用 bind,如下:

var Example = {
x: 1,
showX: function() {
$(".button").click(function() {
$(".example").text(this.x++);
}.bind(this));
}
}
Example.showX();

当然你可以全局添加一个 hank.js,让一些低版本的浏览器支持 Function.bind 这个方法,其实有很多都是需要兼容做的,比如低版本的浏览器的 String.trim Array.indexOf 等等:

if (!Function.prototype.bind) {
  Function.prototype.bind = function (oThis) {
    if (typeof this !== "function") {
      // closest thing possible to the ECMAScript 5 internal IsCallable function
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    }
    var aArgs = Array.prototype.slice.call(arguments, 1),
    fToBind = this,
    fNOP = function () {},
    fBound = function () {
      return fToBind.apply(this instanceof fNOP && oThis
      ? this
      : oThis || window,
      aArgs.concat(Array.prototype.slice.call(arguments)));
    };
    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();
    return fBound;
  };
}
偏爱自由 2017-06-17 13:49:14

已经知道原因: 放入setTimeout内部的函数,this会指向window,而不再是原对象。
解决方法: var _self = this;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文