javascript中this对象的指向问题

this 一般情况下,都是指向函数的拥有者。

var myObject = {
    foo: "bar",
    func: function() {
        var self = this;
        console.log(this.foo);  
        console.log(self.foo);  
        (function() {
            console.log(this.foo);  
            console.log(self.foo);  
        }());
    }
};
myObject.func();
//1.第一个this.foo输出bar,因为当前this指向对象myObject。
//2.第二个self.foo输出bar,因为self是this的副本,同指向myObject对象。
//3.第三个this.foo输出undefined,因为这个IIFE(立即执行函数表达式)中的this指向window。
//4.第四个self.foo输出bar,因为这个匿名函数所处的上下文中没有self,所以通过作用域链向上查找,从包含它的父函数中找到了指向myObject对象的self。


为什么第二点说一般情况下this都是指向函数的拥有者,因为有特殊情况。函数自执行就是特殊情况,在函数自执行里,this 指向的是:window。所以第一个 console.log 打印的是 window 的属性 number。 

所以要加一点:


在函数自执行里,this 指向的是 window 对象。理解关键:方法/函数是由谁(对象) 调用 的,方法/函数内部的 this 就指向谁(该对象);注意:被谁调用,不是处于谁的作用域,即使在作用域





来源:
http://blog.csdn.net/haoaiqian/article/details/70606116
https://segmentfault.com/q/1010000004320761



修改时间 2017-06-23

真诚赞赏,手留余香
赞赏
随机推荐
JS模仿横版游戏中的精灵控制
macOS Mojave上升级PHP
Vue 3.0 快速教程
微信步步为营,百度节节溃败
Photoshop 线稿上色技巧笔记
MySQL报错“1366 - Incorrect integer value: '' for column 'ID' at row 1 ”
Bootstrap 3.7 导航组件响应式CSS样式
CSS实现单行、多行文本溢出显示省略号
MacOS launchctl 启动进程控制
PDO 使用预处理 LIMIT