作者icydream (巧虎)
看板Ajax
标题[问题] bind自己
时间Sat Apr 13 02:31:10 2019
各位好:
以下程式码:
var obj = {
foo: (function() {
return this;
}).bind(obj)
};
obj.foo(); //Window{...}
我的想法是,
foo已经有使用bind函式,
指定thisArg为obj物件,
所以,
foo函式回传的this应该要是obj这个物件,
怎麽会变成Window?
烦请解惑,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 116.118.69.178
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1555093875.A.BDB.html
1F:推 mackliu: var obj = { foo: (()=> this).bind(obj)};obj.foo(); 04/13 09:37
2F:→ mackliu: 你用匿名函数时,this指的是匿名函数自己,而不是obj 04/13 09:38
3F:→ mackliu: 使用箭头函数的话..this 指的是定义时的obj 04/13 09:39
4F:→ mackliu: 详情找一下javascript 的this用法..或者你在匿名函数前先 04/13 09:40
5F:→ mackliu: 最後一句先略过..有不同的做法,但要看状况 04/13 09:47
6F:→ mackliu: 哦..丢脸了..不要理我... 04/13 10:21
7F:→ brianwu1201: 你 bind(obj) 时 obj 物件还没被建立完成,所以()里 04/13 10:54
8F:→ brianwu1201: 面的 obj 这时会是 undefined,当bind(undefined) th 04/13 10:54
9F:→ brianwu1201: is 会指向全域变数。 04/13 10:54
10F:推 s25g5d4: 这问题要从 variable hoisting 开始,在 compile phase o 04/13 12:50
11F:→ s25g5d4: bj 会先被初始化成 undefined,然後因为你在 assignment 04/13 12:50
12F:→ s25g5d4: expression 计算完成之前就呼叫 .bind(),又因为 javascr 04/13 12:50
13F:→ s25g5d4: ipt 是 call by sharing 所以此时传进 bind 的会是 undef 04/13 12:50
14F:→ s25g5d4: ined,即使後来 assignment 完成之後也不会影响传进 .bin 04/13 12:50
15F:→ s25g5d4: d() 里的 argument,所以实际上你等於呼叫了 .bind(undef 04/13 12:50
16F:→ s25g5d4: ined) 04/13 12:50
17F:→ icydream: 感谢各位回答 04/13 14:44
18F:推 thethirdfoot: 你可以加上严谨模式 跑出来的就会是undefined 05/13 12:13
19F:→ thethirdfoot: bind执行的时候obj都还没初始化 所以会变undefined 05/13 12:14
20F:→ thethirdfoot: 但是没有严谨模式他会自动导向Window 05/13 12:14