關於javascript中的this,有一種說法是this指向的調用該函數的對象javascript
下面是幾種狀況下this的指向java
<script>
//構造函數中的this
function Foo() {
this.name = 'wang';
this.age = 89;app
console.log(this);
}函數
var f = new Foo(); //將Foo()當作構造函數,this指的的是建立的這個f對象this
Foo() //將 Foo() 當作一個普通函數,this指的就是全局對象window
//函數做爲對象的一個屬性
var obj = {
name: 'lee',
fn: function () {
console.log(this)
}
}spa
obj.fn() //this就是obj ,這裏的fn() 是經過obj來調用的,咱們常常說,誰調用的方法,那this指向的就是誰對象
var f1 = obj.fn;//這一句就像是var f1 = function(){console.log(this)} 在沒有對象調用方法的時候,方法裏的this指向的就是window
f1(); ip
//call() 和apply 改變函數運行的上下文
var obj1 = {
number: 10
}
obj.fn.call(obj1) //call() 和 apply方法能改變fn的上下文環境,這裏時候的this就是傳入的對象obj1io
//全局函數和對象屬性中的函數
//全局函數總的this就是window
var cat = {
name: 'tom',
eat: function () {
function inner (){ //對象屬性中定義的一個inner函數,是函數聲明的普通函數,this指向的也是window對象
console.log(this)
}
inner();
}
}console
cat.eat() //調用eat方法的時候 經過函數聲明建立了一個函數
</script>