このような構造のクラスがあります
function myClass () {
this.varA = 0;
}
myClass.prototype.consts = {
someConst : 1,
anotherConst : 1000,
}
myClass.prototype.startIt = function () {
window.setTimeout(this.brokenFunc.bind(this), this.consts.anotherConst);
}
myClass.prototype.brokenFunc = function () {
this.varA += this.consts.someConst;
window.setTimeout(this.brokenFunc.bind(this), this.consts.anotherConst);
}
// Example call
var myObj = new myClass();
myObj.startIt();
これはほとんどの Android デバイスで問題なく動作しますが、Android 2.3 を実行しているユーザーから、動作しないとの連絡があり、エミュレータでエラーを再現できました。まず、TypeError: Result of expression 'this.brokenFunc.bind' [undefined] is not a function
この行 ( 内startIt
)について次のように述べています。
window.setTimeout(this.brokenFunc.bind(this), this.consts.anotherConst);
結構だ、と私は考え、電話var _this = this
を回避するために昔ながらのトリックを実行しました。bind
しかし、今ではTypeError: Result of expression 'this.consts' [undefined] is not an object
この行で言う
this.varA += this.consts.someConst;
そして、私は少し迷っています。このコードが機能しないのはなぜですか? 特に、ほとんどの Android バージョンで動作するためです。