Javascript中的this,bind和that使用實例
這篇文章主要介紹了Javascript中的this,bind和that使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Javascript中必須通過this來訪問類成員,可是this的特點就是函數(shù)綁在哪個對象上,它就指向那個對象。這個可能困擾過很多的程序員,特別是從C#,Java等語言過來的程序員。
function Foo(){ this.message = 'This is message from Foo'; } Foo.prototype.printMessage = function(){ console.log(this.message); } function Foo2(){ this.message = 'This is message from Foo2'; } var foo = new Foo(); foo.printMessage(); var foo2 = new Foo2(); foo2.printMessage = foo.printMessage; foo2.printMessage();
輸出為:
This is message from Foo
This is message from Foo2
主要原因就是this改變了,因此Javascript中this的用法,和C++\C#中的大為不同。如果需要傳統(tǒng)方式使用this的函數(shù),可以使用Function.prototype.bind(),指定函數(shù)的this值:
function Foo(){ this.message = 'This is message from Foo'; this.printMessage = (function(){ console.log(this.message); }).bind(this); } function Foo2(){ this.message = 'This is message from Foo2'; } var foo = new Foo(); foo.printMessage(); var foo2 = new Foo2(); foo2.printMessage = foo.printMessage; foo2.printMessage();
輸出為:
This is message from Foo
This is message from Foo
另外使用call和apply也可以改變函數(shù)調(diào)用時的this值。
bind函數(shù)的主要問題是IE9以后才開始提供。并且一旦開始習慣了Javascript的this用法,這種bind反而會不習慣。在實踐中,更多用到的還是保存this:
function Foo(){ var that = this; this.message = 'This is message from Foo'; this.printMessage = function(){ console.log(that.message); }; } function Foo2(){ this.message = 'This is message from Foo2'; } var foo = new Foo(); foo.printMessage(); var foo2 = new Foo2(); foo2.printMessage = foo.printMessage; foo2.printMessage();
輸出同上。
注意我們是通過that來訪問的message(除了that,context和self也是常用的名稱)。Javascript一個還算欣慰的地方就是他的閉包上下文始終是在函數(shù)定義的地方,因此不管函數(shù)被掛上哪個對象上,捕獲到的that始終是這個。當然這個地方不算閉包,有閉無包,但原理是相同的。這也是實踐中用的最多的方法,推薦使用。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
(推薦一個超好的JS函數(shù)庫)S.Sams Lifexperience ScriptClassLib
(推薦一個超好的JS函數(shù)庫)S.Sams Lifexperience ScriptClassLib...2007-04-04詳解JavaScript數(shù)據(jù)類型和判斷方法
這篇文章主要介紹了JavaScript數(shù)據(jù)類型和判斷方法的相關資料,幫助大家更好的理解和學習JavaScript,感興趣的朋友可以了解下2020-09-09淺析JavaScript如何解決跨域問題并手寫一個jsonp
跨域是指瀏覽器為了安全性,實施的同源策略,同源策略要求,只有協(xié)議、域名和端口號完全相同的網(wǎng)頁,才能共享資源,本文整理了一些常用的跨域解決方法,希望對大家有所幫助2024-03-03es6函數(shù)之尾調(diào)用優(yōu)化實例分析
這篇文章主要介紹了es6函數(shù)之尾調(diào)用優(yōu)化,結合實例形式分析了es6函數(shù)尾調(diào)用優(yōu)化相關功能、原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2020-04-04javascript實現(xiàn)的一個帶下拉框功能的文本框
這篇文章主要介紹了javascript實現(xiàn)的一個帶下拉框功能的文本框,需要的朋友可以參考下2014-05-05