function Tab($selector){
var _this = this;
// 这种可以保证this正确,但是这样写很累赘
$selector.on("click", function(){
_this.switchIndex();
});
// 不兼容ie某些浏览器
$selector.on("click", this.switchIndex.bind(this));
// 这种方式绑定会导致switchIndex内部的this为$selector,除了上面那些,
// 还有其他比较自然的方式吗?
$selector.on("click", this.switchIndex);
}
Tab.prototype = {
switchIndex: function(){
// ...
}
};
Sejujurnya, jenis pertama adalah sangat biasa, dan tidak kira jika anda menggunakannya terlalu banyak.
Sudah tentu, jika anda suka pilihan kedua, anda boleh mempertimbangkan untuk menggunakan polyfill bind (iaitu, menggunakan panggilan dan kaedah lain untuk melaksanakan bind apabila tiada bind).
ps: Dalam es6, fungsi anak panah tidak mengalami masalah ini, tetapi sama seperti kes kedua, ia hanya menyokong versi penyemak imbas moden yang lebih tinggi.