關于this的一點心得

最初學習js時,因為和面向對象語言中的語法混淆,一直認為this指向的是當前對象,在實際應用中吃了不少虧,今天根據之前閱讀過的書和文章來講解一下。

獨立函數的調用:


function func(){

console.log(this);

}

func();//Window

這種模式是我們最常見的模式,在全局作用域中聲明一個函數,并調用它,此時函數中的this指向全局對象。

作為對象方法調用:


function say(){

console.log(this);

}

var obj = {

name:"hehe",

say:say

};

obj.say();//Object {name: "hehe"}

當函數作為一個對象的方法調用時,函數中的this綁定到了這個對象。

使用call或apply來調用函數


function func(){

console.log(this);

}

var obj = {

name:"hehe"

};

func.call(obj);//Object {name: "hehe"}

func.apply(obj);//Object {name: "hehe"}

當使用call()或apply()函數進行函數調用時,傳入參數對象的將被設置為函數體內this的值,這兩個函數都是設置調用函數體內的this值的,且第一個參數都為this,區別是第二個參數apply()是一個參數組arguments,參數都是以數組[]的形式傳入,而call(),傳遞給他的參數必須一個一個寫出來。例如


function func(a,b){

console.log(a+b);

}

var obj = {

name:"hehe"

};

func.call(obj,1,2);//3

func.apply(obj,[1,2]);//3

new來調用函數


function Dog(name){

this.name = name;

console.log(this.name);

}

var dog = new Dog('hehe');//hehe

當使用new來調用一個函數時,會創建一個新的對象,然后綁定到Dog()調用中的this。

以上是我對this的一點粗略認識,還有許多細枝末節需要注意,這是我第一篇技術博客,之后在建立更全面的this知識體系后會調整風格完善關于this的研究。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容