深入解析Javascript中this关键字的使用
深入解析Javascript中面向對象編程中的this關鍵字
在Javascript中this關鍵字代表函數運行時,自動生成的一個內部對象,只能在函數內部使用。比如:
function TestFunction(){this.demoVal='This is a demo variable'; }; View Code隨著函數使用的場合不同,this的值會發生改變。但是有一個總的原則:this指的是調用函數的那個對象。
接下來分情況討論this關鍵字的使用:
1. 純粹的函數調用(這是函數的通常用法,屬于全局性調用),this代表全局性對象Global.Demo程序如下:
function TestFunction(){this.demoVal='This is a demo variable';alert(this.demoVal); };TestFunction(); //This is a demo variable View Code接下來證明此時的this代表全局對象,Demo程序如下:
var globalVal='This is a demo global variable';function TestFunction(){alert(this.globalVal); };TestFunction(); //This is a demo global variable View Code2. 作為對象的方法調用(這時this指向上一級對象),Demo程序如下:
function TestFunction(){alert(this.demoVal); };var obj={}; obj.CallFunction=TestFunction; obj.demoVal='This is a object variable';obj.CallFunction(); //This is a object variable View Code3. 作為構造函數調用,所謂的構造函數就是通過這個函數生成一個新的Object對象。此時,this就是指向這個新對象。Demo程序如下:
function TestFunction(){this.deomVal='This is a demo variable'; };var obj=new TestFunction();alert(obj.deomVal); //This is a demo variable View Code接下來的代碼證明this不是指向全局對象:
var demoVal='This is a global variable';function TestFunction(){this.demoVal='This is a local variable'; };var obj=new TestFunction();alert(demoVal); //This is a global variable View Code以上代碼顯示demoVal值根本沒有改變,因此證明this不是指向全局的對象。
4. 使用apply調用,apply函數可以改變函數的執行上下文,apply是函數對象的一個方法,它的作用是改變函數的調用對象,即函數的執行上下文。它的第一個參數表示改變后調用這個函數的對象, 因此,this指向的是第一個參數,Demo實例如下:
var demoVal='This is a demo variable';function TestFunction(){alert(this.demoVal); };var obj={}; obj.demoVal='This is an object demo variable'; obj.TestFunction=TestFunction;obj.TestFunction.apply(); //This is a demo variable View Codeapply()的參數為空時,默認調用全局對象。因此,這時的運行結果為:'This is a demo variable',證明this指的是全局對象。
如果將以上代碼的最后一行改為:obj.TestFunction.apply(obj),則輸出的結果為:'This is an object demo variable'。證明此時的this指向obj。
?
轉載于:https://www.cnblogs.com/chengbing2011/p/4226285.html
總結
以上是生活随笔為你收集整理的深入解析Javascript中this关键字的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecshop 首页添加某个分类下面的商品
- 下一篇: 【转】职场三国杀:为什么职场争斗中认真干