Javascript中的this,bind和that使用實(shí)例
這篇文章主要介紹了Javascript中的this,bind和that使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
Javascript中必須通過this來訪問類成員,可是this的特點(diǎn)就是函數(shù)綁在哪個(gè)對象上,它就指向那個(gè)對象。這個(gè)可能困擾過很多的程序員,特別是從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)用時(shí)的this值。
bind函數(shù)的主要問題是IE9以后才開始提供。并且一旦開始習(xí)慣了Javascript的this用法,這種bind反而會(huì)不習(xí)慣。在實(shí)踐中,更多用到的還是保存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一個(gè)還算欣慰的地方就是他的閉包上下文始終是在函數(shù)定義的地方,因此不管函數(shù)被掛上哪個(gè)對象上,捕獲到的that始終是這個(gè)。當(dāng)然這個(gè)地方不算閉包,有閉無包,但原理是相同的。這也是實(shí)踐中用的最多的方法,推薦使用。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
分享幾種比較簡單實(shí)用的JavaScript tabel切換
這篇文章主要分享幾種比較簡單實(shí)用的JavaScript tabel切換 的相關(guān)資料,需要的朋友可以參考下2015-12-12
微信小程序?qū)崿F(xiàn)指定顯示行數(shù)多余文字去掉用省略號代替
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)指定顯示行數(shù)多余文字去掉用省略號代替的方法,需要的朋友可以參考下2018-07-07
JavaScript如何使用Promise實(shí)現(xiàn)分批處理接口請求
當(dāng)我們在開發(fā)時(shí)遇到需要同時(shí)發(fā)起百條接口請求怎么辦呢,本文主要來和大家介紹一下JavaScript如何使用Promise實(shí)現(xiàn)分批處理接口請求,需要的可以參考下2024-03-03
一文詳解如何在項(xiàng)目中和平時(shí)練習(xí)中應(yīng)用es6語法
ES6是JavaScript的一個(gè)版本,因?yàn)槲覀兦懊嬗玫降膙ue默認(rèn)使用ES6語法開發(fā),所以我們在這一節(jié)補(bǔ)充ES6的知識(shí)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于如何在項(xiàng)目中和平時(shí)練習(xí)中應(yīng)用es6語法的相關(guān)資料,需要的朋友可以參考下2022-11-11
JavaScript中的null和undefined用法解析
這篇文章主要介紹了JavaScript中的null和undefined用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
JavaScript SHA-256加密算法詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了JavaScript SHA-256加密算法代碼,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2016-10-10
再談javascript 動(dòng)態(tài)添加樣式規(guī)則 W3C校檢
Ruby's Louvre blog都是一些精品內(nèi)容,下面這個(gè)是介紹javascript 動(dòng)態(tài)添加樣式規(guī)則,而且最后的函數(shù),可以讓你的css通過w3c的驗(yàn)證。2009-12-12

