改變this的指向問題;
阿新 • • 發佈:2018-12-18
用call()和apply()改變this的指向,那什麼時候用this呢?(建構函式),那為什麼要用建構函式呢?(為了生成物件)。
1.解決函式內this指向的問題
(1)var that/_this=this;在函式外提前宣告一個變數
(2)通過call()和apply()改變this的指向
2.call()和apply()的區別
用法是一樣的,但是引數形式不一樣
call() : fn.call(obj,a,b)
apply() : fn.apply(obj,[a,b])
二者均代表的是將函式內的this換成Obj後再呼叫
3.bind()修改函式內的this
fn.bind(bind,a,b) bind的用法只是改變了this的指向,但是並沒有呼叫
如果呼叫fn.bind(bind,a,b)()
案例:
function fn(){
this.names="zhang",
console,log(this.names)
}
var obj={
names="li"
}
fn.call(obj);
結果輸出還是"zhang”
分析:
var obj={
names="li"
}
就相當於>>>
function fn(){
this.names="zhang"
console.log(this.names)
}
fn.prototype.name="li"
fn()
fn.call(obj)是fn繼承了obj中的所有的屬性,只要是繼承的可以看成是公有的,天生自帶的是私有的,在使用時,有了私有就不會使用共有的
也可以得出:call() apply()都可以看成是繼承