1. 程式人生 > >ECMASCript5新特性之Function.prototype.bind

ECMASCript5新特性之Function.prototype.bind

用途:如何在另一個函式中保持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