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