1. 程式人生 > >js---call/apply,this

js---call/apply,this

1.call/apply

作用:改變this指向

區別:引數列表不一樣,call的引數列表是按實參一個個傳,apply是傳一個數組arguments

例子:

function test(){console.log(111)}
test.call();//111 說明test()就等於test.call(); 任何方法都能call

function Person(age,name){
    this.age=age;
    this.name=name;
}
var person=new Person(15,'xiaoming');
var obj={};
//call的第一個引數是呼叫函式的物件,之後是引數
Person.call(obj,23,'xiaohuang');//Person在執行時,函式裡的this是obj。
//call是借用別人的建構函式成全自己,僅此而已並不會獲得該建構函式的原型,只是借用!!
console.log(person,obj); //{name:'xiaoming',age:15} {name:'xiaohuang', age:23}

2.this

函式預編譯過程中,函式中的this指向window,不論在哪執行;

全域性作用域中,this是window;

call和apply可以改變this的指向;

誰呼叫的方法,this就是誰。;

注意:

1. 沒人呼叫的時候,空執行,走預編譯,this就是window,不管在哪執行!!任何函式在預編譯的時候,都會生成this:window,自己AO自帶,不用去作用域鏈找。

2. new的時候,函式內部會var this=Object.create(函式名.prototype),意味著函式自己的AO裡的this被賦值為Object.create(函式名.prototype)

,而不是window了