吳周超
2018-08-09 23:57:43
var object = {test: {doSomeThing() {function fun1 () {return this;}return fun1();},doNextThing() {var fun2 = () => this;return fun2();},doLastThing() {return this;}}};console.log(object.test.doSomeThing()); // windowconsole.log(object.test.doSomeThing.call([1]));//這里的call([1])完全不懂是 //啥意思console.log(object.test.doNextThing.apply([2] ));console.log(object.test.doLastThing.apply({}));//
1 回答

web阿周
TA貢獻(xiàn)3條經(jīng)驗(yàn) 獲得超1個(gè)贊
首先你要理解,[1],[2],{}這三者,都繼承自object原型,而call,apply接收的第一個(gè)參數(shù),就是指定調(diào)用函數(shù)的this對(duì)象的指向,call([1])就代表調(diào)用這個(gè)函數(shù)時(shí),this指向的應(yīng)該是一個(gè)數(shù)組對(duì)象,因此你第一個(gè)函數(shù)doSomeThing,傳入的是數(shù)組對(duì)象[1],但是es5語法中,function函數(shù)會(huì)產(chǎn)生自己的作用域,因此此時(shí)this打印出來又變成了window,但是es6的箭頭函數(shù)不會(huì),所以第二個(gè)函數(shù)doNextThing打印出來的是[2],同理可得第三個(gè)打印出來的就是{}
添加回答
舉報(bào)
0/150
提交
取消