bind()

首先是改變this指向問題函數

 1 var altwrite = document.write; this

2 altwrite("hello"); spa

上面的程序運行,會報錯:Uncaught TypeError: Illegal invocation  非法調用code

報錯的緣由就是this指向問題,由於altwrite指向的是windowd對象,而write指向的是document對象對象

咱們能夠經過bind()修改altwrite的上下文,把它指向document,就能夠了,修改以下:blog

 

 1 var altwrite = document.write; get

2 altwrite.bind(document)("hello"); string

 

固然也能夠使用call()方法:it

 1 altwrite.call(document, "hello") io

 

綁定函數

bind()最簡單的用法是建立一個函數,使這個函數不論怎麼調用都有一樣的this值。

將方法從對象中拿出來,而後調用,而且但願this指向原來的對象。若是不作特殊處理,通常會丟失原來的對象。使用bind()方法可以很漂亮的解決這個問題:

 

 1   this.num = 9;
 2     var mymodule = {
 3         num: 81,
 4         getNum: function() {
 5             return alert(this.num);
 6         }
 7     };
 8 
 9     mymodule.getNum();//81
10 
11     var getNumb = mymodule.getNum;
12     getNumb();// 9  這個函數裏面的this指向的是全局對象
13 
14     //建立一個this綁定到mydule的函數
15     var boundGetNum = getNumb.bind(mymodule);
16     boundGetNum(); // 81
相關文章
相關標籤/搜索