Javascript 可观察到的敲除不是一个函数错误

Javascript 可观察到的敲除不是一个函数错误,javascript,knockout.js,ecmascript-6,Javascript,Knockout.js,Ecmascript 6,我正在探索开源开发,并使用yeoman和带有crossroads和requirejs的knockout生成器。我看过ES6类和构造函数,但我不完全理解在某些情况下敲除会发生什么,因为在ES6类或函数模式中,可观察到的不是函数错误。所以我以前见过这种行为,但是如果可以的话,我想了解一些额外的细节 以下是这种行为的代码笔: 有人能解释一下失败函数查找的原因吗? 代码: 谢谢这实际上是您的此指针有问题。试试这个: class Circle { constructor(diameter, quali

我正在探索开源开发,并使用yeoman和带有crossroads和requirejs的knockout生成器。我看过ES6类和构造函数,但我不完全理解在某些情况下敲除会发生什么,因为在ES6类或函数模式中,可观察到的不是函数错误。所以我以前见过这种行为,但是如果可以的话,我想了解一些额外的细节

以下是这种行为的代码笔:

有人能解释一下失败函数查找的原因吗? 代码:


谢谢

这实际上是您的此指针有问题。试试这个:

class Circle {
  constructor(diameter, quality) {
    this.diameter = ko.observable(diameter);
    this.quality = ko.observable(quality);
  }

  updateCircle() {
    console.log('updating...');
    this.diameter(this.diameter() + 1);
    console.log(this.diameter());

  }

  startTimer() {
    var timer = setInterval(function() {
      this.updateCircle()
    }.bind(this), 1000)
  }
};

let c = new Circle(270, 5);
c.startTimer();
console.log("started")

注意绑定。

是否检查了updateCircle方法中的该指针是否正确?否则你可能需要把它绑起来。离题了,但这些yoeman和你不理解、不需要的东西是什么?摆脱所有的积垢,从最基本的开始。不要把你不懂的东西弄乱。如果你不理解它,你就不需要它。除非你明白它是什么,并且认识到你对它的需要,否则不要使用它。不要一下子就把每件事都做完。把它分解,一次只拿一件东西。在进入ES6、requirejs和yoeman之前,先了解淘汰赛本身,这是什么交叉点?我从没听说过,我记得这件事。再次阅读“这个”和“绑定”。奇怪的是,有没有一种方法可以在不更改计时器的情况下为updateCircle()方法提供“this”的正确上下文或绑定?例如,“var self=this;”?这是一种好的模式还是bind()是一种更谨慎的方法?是的。找到方法的一种方法是查看typescript编译的是什么
setInterval(()=>{this.doStuff()}),1000)
,因为lambda语法始终保留this状态当然,关于“这个”问题还有很多其他的资源可以找到。我个人喜欢在我所有的js代码中使用类似Transfile的类型脚本。
class Circle {
  constructor(diameter, quality) {
    this.diameter = ko.observable(diameter);
    this.quality = ko.observable(quality);
  }

  updateCircle() {
    console.log('updating...');
    this.diameter(this.diameter() + 1);
    console.log(this.diameter());

  }

  startTimer() {
    var timer = setInterval(function() {
      this.updateCircle()
    }.bind(this), 1000)
  }
};

let c = new Circle(270, 5);
c.startTimer();
console.log("started")