javascript - 关于this的指向性问题
问题描述
var foo = 'window';var obj = { foo : 'obj', getFoo : function(){return function(){ return this.foo;}; }};var f = obj.getFoo();console.log(f()); //结果:window
为什么上述代码的运行结果是window呢?
问题解答
回答1:obj.getFoo() 返回一个方程,赋值给了 f 。f 通过 f() 被调用,没有明确的调用者,所以 this 就是 window 。
想要的到 'obj' ,可以这样做
var foo = 'window';var obj = { foo : 'obj', getFoo : function(){var self = this;return function(){ return self.foo;}; }};var f = obj.getFoo();console.log(f());回答2:
因为,在f()实际运行的地方,this是window,由于没有通过call或者bind改变上下文,所以输出的就是window。
可以按照如下替换方法:
console.log(f());// ----->console.log(obj.getFoo());// ----->console.log(function() { var self = this; return function() {return self.foo }});
这里的self就是指向window了,所以return self.foo就是return window.foo,也就是’window’。
回答3:其实最简单的理解就是obj.getFoo给了f,然后再看这方法运行的位置在哪.
f = function () { return function () {return this.foo }}回答4:
console.log(f())中f()是独立被调用的 1.如果调用者函数,被某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。2.如果函数独立调用,那么该函数内部的this,则指向undefined。推荐阅读 http://www.jianshu.com/p/d647... 希望对你有所帮助
回答5:函数执行,函数体内的this指向函数的调用方
1、下面这段代码,getFoo函数的调用方是obj,所以getFoo函数内部的this指向obj对象
var f = obj.getFoo()
2、getFoo函数返回了一个匿名函数赋给变量f,再执行函数f,此时变量f是挂载到window上的,函数f的调用方是window,函数f内部的this也指向window
console.log(f()); //结果:window
相关文章:
1. PHP中的$this代表当前的类还是方法?2. docker 下面创建的IMAGE 他们的 ID 一样?这个是怎么回事????3. html5 - bootstrap修改样式的问题4. linux - python 安装 Anaconda 环境变量问题请教5. css - 关于HTML中width和height的疑问(这个提问的标题不好起)6. javascript - 在 model里定义的 引用表模型时,model为undefined。7. HTML5表单必填属性设置自定义验证消息?8. java - 接口中的成员变量怎么不是常量了?9. javascript - 清空Chrome缓存的疑问10. java - 如图,jsp页面的form中的action是怎么映射到这个位置的?为什么不写dynUser就可以映射到save?

网公网安备