PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
Ajax
[问题] bind自己
楼主:
icydream
(巧虎)
2019-04-13 02:31:10
各位好:
以下程式码:
var obj = {
foo: (function() {
return this;
}).bind(obj)
};
obj.foo(); //Window{...}
我的想法是,
foo已经有使用bind函式,
指定thisArg为obj物件,
所以,
foo函式回传的this应该要是obj这个物件,
怎么会变成Window?
烦请解惑,谢谢。
作者: mackliu (回不去的大叔)
2019-04-13 09:37:00
var obj = { foo: (()=> this).bind(obj)};obj.foo();你用匿名函数时,this指的是匿名函数自己,而不是obj使用箭头函数的话..this 指的是定义时的obj详情找一下javascript 的this用法..或者你在匿名函数前先最后一句先略过..有不同的做法,但要看状况哦..丢脸了..不要理我...
作者:
brianwu1201
(bunny29)
2019-04-13 10:54:00
你 bind(obj) 时 obj 物件还没被建立完成,所以()里面的 obj 这时会是 undefined,当bind(undefined) this 会指向全域变量。
作者:
s25g5d4
(function(){})()
2019-04-13 12:50:00
这问题要从 variable hoisting 开始,在 compile phase obj 会先被初始化成 undefined,然后因为你在 assignmentexpression 计算完成之前就呼叫 .bind(),又因为 javascript 是 call by sharing 所以此时传进 bind 的会是 undefined,即使后来 assignment 完成之后也不会影响传进 .bind() 里的 argument,所以实际上你等于呼叫了 .bind(undefined)
楼主:
icydream
(巧虎)
2019-04-13 14:44:00
感谢各位回答
作者:
thethirdfoot
(第三只脚)
2019-05-13 12:13:00
你可以加上严谨模式 跑出来的就会是undefinedbind执行的时候obj都还没初始化 所以会变undefined但是没有严谨模式他会自动导向Window
继续阅读
[问题] vue js做成一个专案后,语法该写在哪?
ericerix
[问题] JavaScript会被什么取代?
dharma
[问题] React Router 点选连结后的一般 js 无效
ymcheung
Re: [问题] 写了Firefox脚本 但是onclick无法作用
eight0
[问题] 写了Firefox脚本 但是onclick无法作用
orange0319
Re: [问题] js如何取得其他时区的时间?
taco2548
[ js ] GitHub 有趣专案介绍 + 推坑
w2sw2sw2s
[问题] 取得今天过了多久的timestamp
taco2548
[问题] 请教if叙述中的boolean判断
hugct
[问题] vuejs build之后 html开启内容是白的
ponwar87123
Links
booklink
Contact Us: admin [ a t ] ucptt.com