9-this
第九課 this
一、this基本概念
this是Javascript語言的一個(gè)關(guān)鍵字。在JavaScript中,this是動(dòng)態(tài)綁定,或稱為運(yùn)行期綁定的。在不同的情況下,this指向各不相同。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)象。
1.全局范圍內(nèi)
當(dāng)在全部范圍內(nèi)使用 this,它將會(huì)指向全局對(duì)象,在瀏覽器中,window 就是該全局對(duì)象。
2.函數(shù)調(diào)用
this指向全局對(duì)象,即windows
var name = 'Jeepeng'; function showName() {console.log(this.name); } showName();3.對(duì)象方法調(diào)用
在對(duì)象方法調(diào)用中this指向?qū)ο?/p> var person = {name: 'Jeepeng',showName: function() {console.log(this.name);} }; person.showName();
4.構(gòu)造函數(shù)調(diào)用
在構(gòu)造函數(shù)內(nèi)部,this指向新創(chuàng)建的對(duì)象。
function Person(name) {this.name = name; } var person = new Person('Jeepeng'); console.log(person.name); var person1 = Person(‘Lily’); // 函數(shù)調(diào)用,this指向windowsJavaScript 中的構(gòu)造函數(shù)很特殊,如果不使用 new 調(diào)用,則和普通函數(shù)一樣。作為又一項(xiàng)約定俗成的準(zhǔn)則,構(gòu)造函數(shù)以大寫字母開頭,提醒調(diào)用者使用正確的方式調(diào)用。如果調(diào)用正確,this 綁定到新創(chuàng)建的對(duì)象上。
二、this可改變(重點(diǎn))
1.使用apply或call調(diào)用
call和apply的作用是改變函數(shù)執(zhí)行時(shí)的上下文,即改變函數(shù)運(yùn)行時(shí)的this指向。二者的作用完全一樣,區(qū)別只在于這兩個(gè)函數(shù)接受的參數(shù)形式不同。
var person = {name: 'Jeepeng',showName: function() {console.log(this.name);} }; var newPerson = {name: 'Lily'}; person.showName.call(newPerson); function foo(a, b, c) {}var bar = {}; foo.apply(bar, [1, 2, 3]); // 數(shù)組將會(huì)被擴(kuò)展,如下所示 foo.call(bar, 1, 2, 3); // 傳遞到foo的參數(shù)是:a = 1, b = 2, c = 3當(dāng)使用 Function.prototype 上的 call 或者 apply 方法時(shí),函數(shù)內(nèi)的 this 將會(huì)被 顯式設(shè)置為函數(shù)調(diào)用的第一個(gè)參數(shù)。
2.bind
bind與call很相似,不過bind的返回值是函數(shù)
var person = {name: 'Jeepeng',setName: function (name) {this.name = name;},showName: function() {console.log(this.name);(function() {this.setName('Lily');}.bind(this))();} }; person.showName();3.箭頭函數(shù)
箭頭函數(shù)并不綁定 this,arguments,super(ES6),抑或 new.target(ES6)。所有涉及它們的引用,都會(huì)沿襲向上查找外層作用域鏈的方案來處理。
轉(zhuǎn)載于:https://www.cnblogs.com/fengxuefei/p/6250543.html
總結(jié)
- 上一篇: DataGridView控件内建立日期选
- 下一篇: C# I/O