(1)普通函數中的this指向:
this指向普通函數中的調用者;
<script type="text/javascript">
//普通函數;、
/*
調用普通函數時,this的指向是window;
本質:window.fn();調用的。
*/
function fn(){
console.log(this);
}
fn();
//定義一個全局變量其實就是給window添加屬性
var name = "王五";
function obj(){
var name = "張三";
console.log(this);
console.log(this.name); //this 指向的是window 找window中的name;
}
obj();
//運行結果: window;王五;
var obj1 = {
name:"趙六",
sayName:function(){
console.log(this.name);//this指向obj1;
}
}
obj1.sayName(); //obj1調用sayName;所以this指向obj1;
//總結:this在普通函數中的指向;誰調用函數的執行,函數中this就會指向誰。
</script>
通過call和apply改變函數內部this的指向:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<script type="text/javascript">
//call是function數據類型提供的一種方法,修改被調函數內部指針的指向。
var name = "王五";
var one = {
name:"張三"
};
var two = {
name:"李四"
};
function getName() {
console.log(this.name);
}
//普通函數調用this指向的是window;
getName();
//改變函數中的this指針的指向。
getName.call(one);
getName.apply(two);
//js中指針不能指向Null;
getName.call(null); //不能被修改。this指向window;
//call和 apply的作用和用法十一樣的,只是子啊傳遞參數的時候,call把所需要的函數參數依次列舉出來,而apply需要把函數的參數放在一個數組中。
</script>
</head>
<body>
</body>
</html>