ECMASCript5新特性之Function.prototype.bind
阿新 • • 發佈:2018-11-07
用途:如何在另一個函式中保持this上下文
例項一:
var obj = {
fun1: function(cb) {
cb();
},
fun2: function() {
alert(1);
},
render: function() {
var self = this;
this.fun1(function() {
self.fun2();
});
}
};
用bind方法改進:
var obj = {
fun1: function (cb) {
cb();
},
fun2: function() {
alert(1);
},
render: function() {
this.fun1(function() {
this.fun2();
}.bind(this)); // 即當前函式的內部的執行物件是this
}
};
當然,call方法和apply也能實現類似於bind方法的功能,即改變當前函式的執行物件,例如:
var x = 5;
var foo = {
x: 3
};
var bar = function () {
console.log(this.x);
}
bar(); // 5
var boundFunc = bar.bind(foo);
boundFunc(); // 3
bar.call(foo); // 3
bar.apply(foo); // 3