首頁 > web前端 > js教程 > 主體

關於this的相關問題

jacklove
發布: 2018-05-21 13:35:29
原創
1167 人瀏覽過

在學習中經常遇到this問題,本篇將會講解其相關問題。

this作為全域物件window的幾個情況

作為函數呼叫的this

#作為內部巢狀函數的this

在setTimeout、setInteval中this仍然是全域變數window

this為非全域變數的幾個情況

建構子(建構函數就是透過函數產生一個新的對象,這時this指的為這個新對象)

做為物件方法呼叫,如:

var obj1 = {    name: 'Byron',    fn : function(){        console.log(this);
    }
};
obj1.fn(); // obj1var fn2 = obj1.fn;
fn2();  //此时this仍然指的是全局对象window
登入後複製

DOM物件綁定事件this代表來源DOM物件(低版本IE下有bug,也指向window)

#使用bind函數,綁定原函數,此時this指的是傳入bind的第一個參數。如:

var obj1 = {    name: 'Byron',    fn : function(){        console.log(this);
    }
};
obj1.fn(); //obj1var fn2 = obj1.fn;
登入後複製
fn2();  //此时this仍然指的是全局对象windowvar fn3 = obj1.fn.bind(obj1);fn3();  //此时this指的为obj1(此方法比较灵活,可利用此方法将所要传送给this 的参数指定为bind的第一个对象)
apply和call设置this,如:
fn.call(context,num1,num2...);fn.apply(context,numArray)
登入後複製

第一個參數為this對象,不同點是call接受參數列表,apply接受參數數組。

caller,如果一個函數f是在全域作用域內被調用的,則f.caller為null,相反,如果一個函數是在另外一個函數作用域內被調用的,則f.caller指向調用它的那個函數.可以簡單的理解為caller指的是他的父函數。如:

function fn(){    console.log(fn.caller); 
    function fn2(){        console.log(fn2.caller)
    }
    fn2()
}
登入後複製
fn();
callee,当函数被调用的时候arguments.callee(匿名函数的时候很好用,可以调用自身)
var i = 1;window.onclick = function(){    console.log(1);    if(i<5){        i++;        setTimeout(arguments.callee,200);    }}
登入後複製

本篇講解了this的相關問題,更多相關內容請關注php中文網。

相關推薦:

JS陣列、字串及數學函數

關於JS時間物件與遞迴問題

一些CSS樣式基礎知識

以上是關於this的相關問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板