Javascript中的this關鍵字是一個很重要的概念,也是很容易讓初學者混淆的一個概念。this指向當前執(zhí)行上下文中的對象,當在全局作用域或普通函數中使用this時,this通常指向全局對象Window。但是在對象的方法中使用this時,指向的是當前對象。本文將詳細介紹在Javascript中的this關鍵字的使用。
在全局作用域中使用this。在全局作用域中使用this時,這個this關鍵字指的就是全局對象Window。例如:
無論是在函數中還是在方法中,只要沒有明確指定作用域,this都默認指向全局對象Window。
在函數中使用this。在函數中添加一個this并不會使它指向函數本身。實際上,它將根據調用函數的方式進行綁定。考慮以下代碼:
當我們調用foo()函數時,this指向了全局對象Window,因為這是默認上下文。所以,this.bar等價于window.bar。結果是將全局變量bar的值打印到控制臺上。
在方法中使用this。在對象的方法中使用this,this將指向調用方法的對象。例如:
當我們調用obj.foo()方法時,this指向對象obj。因為在foo()函數內部,this指向當前調用該方法的對象,即obj。
使用call和apply修改this的上下文。在Javascript中,我們可以使用call和apply方法來明確指定函數執(zhí)行時的上下文。例如:
在這個例子中,我們使用了call方法來指定foo函數的上下文是obj對象。如此一來,foo函數中的this將指向新的對象,也就是obj對象。
總結:在Javascript中,this指向當前執(zhí)行上下文的對象。如果在全局作用域或普通函數中使用this,則指向的是全局對象Window。而在對象的方法中使用this,指向的是當前對象。我們還可以使用call和apply來明確指定函數執(zhí)行時的上下文。
在全局作用域中使用this。在全局作用域中使用this時,這個this關鍵字指的就是全局對象Window。例如:
console.log(this === window); //true
無論是在函數中還是在方法中,只要沒有明確指定作用域,this都默認指向全局對象Window。
在函數中使用this。在函數中添加一個this并不會使它指向函數本身。實際上,它將根據調用函數的方式進行綁定。考慮以下代碼:
function foo(){ console.log(this.bar); } var bar = "hello world"; foo(); // "hello world"
當我們調用foo()函數時,this指向了全局對象Window,因為這是默認上下文。所以,this.bar等價于window.bar。結果是將全局變量bar的值打印到控制臺上。
在方法中使用this。在對象的方法中使用this,this將指向調用方法的對象。例如:
var obj = { foo: function(){ console.log(this === obj); // true } } obj.foo();
當我們調用obj.foo()方法時,this指向對象obj。因為在foo()函數內部,this指向當前調用該方法的對象,即obj。
使用call和apply修改this的上下文。在Javascript中,我們可以使用call和apply方法來明確指定函數執(zhí)行時的上下文。例如:
function foo(){ console.log(this.bar); } var obj = {bar: "hello world"}; foo.call(obj); // "hello world"
在這個例子中,我們使用了call方法來指定foo函數的上下文是obj對象。如此一來,foo函數中的this將指向新的對象,也就是obj對象。
總結:在Javascript中,this指向當前執(zhí)行上下文的對象。如果在全局作用域或普通函數中使用this,則指向的是全局對象Window。而在對象的方法中使用this,指向的是當前對象。我們還可以使用call和apply來明確指定函數執(zhí)行時的上下文。