JavaScript中this在對象中引用的四種形式:
代碼演示戳這里
1.無任何前綴的函數調用時,this指向頂層對象或者叫全局對象,瀏覽器里是window(nodejs里為global)
console.log(this); //輸出瀏覽器的相關信息
2.方法調用的時候,this指向方法所在的對象
var robot = {
name:"javascript",
say:function()
{
console.log(this.name)
}
};
robot.say(); // 輸出javascript
3.構造函數里,this指向新生成的實例
function Robot(name)
{
this.name = name;
this.say = function(){
console.log(this.name)
}
}
var robot= new Robot('java');
robot.say(); //輸出'Java'
4.apply/call調用的時候,this指向apply/call方法中的第一個參數
var robot_1 = {name:'c'}
var robot_2 = {name:'c#'}
function say(){
console.log(this.name)
}
say.call(robot_1) //輸出'c'
say.call(robot_2) //輸出'c#'
函數內this的使用
1.方法內的this指向被調用的對象
2.函數是無任何前綴的直接調用的,this指向全局對象
3.調用函數的apply或call方法
apply和call的功能是,通過傳參的方式,強制函數內的this指向某一對象,this引用的會被指向apply/call的第一個參數。
(教程代碼第九行有錯誤做如下改正)
var robot_1 ={
name:"cup",
say:function(){
console.log(this.name)
}
};
var robot_2 ={ name:"bower" };
robot_1.say() //打印結果為cup
robot_1.say.apply(robot_2) // 打印結果為bower
//通過apply調用robot_1.say方法。方法內的this引用引用了robot_2
robot_1.say.call(robot_2) // 打印結果為bower
//通過call調用robot_1.say方法。方法內的this引用引用了robot_2
Java中的this
Java中也有this關鍵字,它和JavaScript中的this有什么區別呢?
1、在類的方法定義中使用的this關鍵字代表調用該方法對象的引用。
2、當必須指出當前使用方法的對象是誰時,要使用關鍵字this。
3、有時使用this可以處理方法中成員變量和參數重名的情況。
4、this可以看做是一個變量,它的值是當前對象的引用。
5、Java中this一般出現在方法中,當方法沒有被調用時,并不知道this指向哪個具體的對象。所以當某個對象調用有this的方法時,this就指向調用這個方法的對象。
6.this只能在非靜態的情況下使用
小結
JavaScript和Java是兩種不同的語言,沒有必然的聯系,this關鍵字在JavaScript中的使用更加靈活多變.