- 主题:storage addListener(f)没反应,改成(x=>f(x))则可以。为啥? (
这位版友基本功相当扎实啊。你的主业是做什么项目的?
【 在 zli07 (Anonymous) 的大作中提到: 】
: 第一个相当于
: var reload = location.reload; reload()
: 这个时候 reload 方法接受的 this 指向的是 global 对象。
: 可以简单改为 addListener(location.reload.bind(location))
--
FROM 116.234.18.*
对的啊。
chrome的location.reload方法会检查this是否location,不是就不执行:
location.reload.apply(window)
VM883:2 Uncaught TypeError: Illegal invocation
location.reload.apply(document)
VM883:2 Uncaught TypeError: Illegal invocation
location.reload.apply(document.body)
VM883:2 Uncaught TypeError: Illegal invocation
location.reload.apply(undefined)
VM883:2 Uncaught TypeError: Illegal invocation
location.reload.apply()
VM883:2 Uncaught TypeError: Illegal invocation
location.reload.apply(location) // ok
location.reload.bind(location)() // ok
【 在 eGust (十年) 的大作中提到: 】
: 然而并不对啊,this 啥取决于 caller 的 this 是啥。首先 browser 里没有 global,其次没有在 event callback 里用 window 当 this 的习惯。按照 dom 习惯是 onChange,那么相当于 location.reload.call(storage.onChange)
--
FROM 116.234.18.*
手艺真不错
【 在 zli07 (Anonymous) 的大作中提到: 】
: 哈,我就是整js的
--
FROM 116.234.18.*
对呀,就是你说的。所以楼主的第一种写法在chrome里会出错啊。
【 在 eGust (十年) 的大作中提到: 】
: bind 是标准解决方式,我并不是说它有问题。而是上下文 this 变量并不是 global(因为不存在),而且也不大可能是 window。
--
FROM 116.234.18.*
哦。原来如此。是稍有瑕疵。
那个应该是相当于:
tmp = location.reload; tmp.apply( **event_source** );
不一定是global this。
【 在 KDr2 (R2D2) 的大作中提到: 】
: 他是说,你 M 的贴里,“这个时候 reload 方法接受的 this 指向的是 global 对象。”这句话不对,其他的没问题。
--
FROM 116.234.18.*