let a = { name: ‘ zaki ’, say: function(param) { console.log(param); console.log(this); console.log(this.name); return param; } };
(function() { a.say(); //可以打印出符合期望的的 this 信息 let fn = a.say; fn(1); // 不能打印出符合期望的 this 信息 })()
1
ookkxw 2018-11-06 14:51:12 +08:00 via iPhone
看你不知道的 js 基础问题,
|
2
Tapir 2018-11-06 18:01:30 +08:00 1
基础知识
call apply bind 都能解决问题 ES 顺序看 12.3.4Function Calls 12.3.4.2Runtime Semantics: EvaluateCall ( func, ref, arguments, tailPosition ) 7.3.12Call ( F, V [ , argumentsList ] ) 9.2.1[[Call]] ( thisArgument, argumentsList ) 9.2.1.2OrdinaryCallBindThis ( F, calleeContext, thisArgument ) 这几部分 关键点 If thisArgument is undefined or null, then Let globalEnv be calleeRealm.[[GlobalEnv]]. Let globalEnvRec be globalEnv's EnvironmentRecord. Assert: globalEnvRec is a global Environment Record. Let thisValue be globalEnvRec.[[GlobalThisValue]]. |
3
hanzichi 2018-11-06 19:07:14 +08:00 1
左转 http://sf.gg
|
4
linxiaoziruo OP 老哥们,弄清楚了。多谢各位
|