Js-this指向問題

1.關於this我看了不少文章windows

每次看都會有新發現,可是每次也老是忘記 此次我不想再忘記.app

http://www.javashuo.com/article/p-fyedrdrd-gg.html(參考文章)函數

this指向的是最終調用他的那個對象 

改變this的指向問題:post

1.使用箭頭函數ui

2.使用_this = this(最經常使用的)this

var name ='window' var a = { name : "Cherry", func1: function () { console.log(this.name) }, func2: function () { var _this = this; setTimeout( function() { _this.func1() },100); } }; a.func2() // Cherry

3.使用apply,call,bindspa

this指向的是他們的第一個參數prototype

# var a = { name : "Cherry",code

func1: function () { console.log(this.name) }, func2: function () { setTimeout( function () { this.func1() //}.apply(a),100); // 使用apply //}.call(a),100);//使用call }.bind(a)(),100; //使用bind } }; a.func2() // Cherry

4.new實例化一個對象對象

函數調用前使用的了new關鍵字,就是調用了構造函數.

在new實例化時,發生了什麼過程呢?

var a = new myFunction("Li","Cherry"); new myFunction{ var obj = {}; obj.__proto__ = myFunction.prototype; var result = myFunction.call(obj,"Li","Cherry"); return typeof result === 'obj'? result : obj; }

1.建立一個空對象 obj;

2.將新建立的空對象的隱式原型指向其構造函數的顯示原型。

3.使用 call 改變 this 的指向

4.若是無返回值或者返回一個非對象值,則將 obj 返回做爲新對象;若是返回值是一個新對象的話那麼直接直接返回該對象。

# 因此在new的過程當中,就改變了this的指向.指向了新的對象.

函數的調用方法:

1.做爲一個函數調用

var name = 'xixi' function a(){ var name = 'haha' console.log(this.name) //指向的是window } a() // xixi

就是一個函數,不屬於任何對象.

2.函數做爲方法調用

var name = "windowsName"; var a = { name: "Cherry", fn : function () { console.log(this.name); // Cherry } } a.fn();

這裏的a對象有一個屬性,有一個方法.a.fn() 即fn方法裏指向的是a對象

this永遠指向最後調用他的那個函數 

3.使用構造函數調用方法

// 構造函數: function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } // This creates a new object var a = new myFunction("Li","Cherry"); a.lastName; // 返回 "Cherry"

在實例化對象new時,就以及改變了this的指向

4.做爲函數方法調用函數

var name = "windowsName"; function fn() { var name = 'Cherry'; innerFunction(); function innerFunction() { console.log(this.name); // windowsName } } fn()

這個例子以及前面調用a.fun2()的例子,都是在函數方法裏面再調用方法的例子.

記住一些特殊的名詞,爲何本身 老是記不住呢?

只有這樣,才能夠更好的回答問題,就解決問題.

相關文章
相關標籤/搜索