1. 程式人生 > >改變this的指向問題;

改變this的指向問題;

用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()都可以看成是繼承