js---call/apply,this
阿新 • • 發佈:2018-11-12
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了