javascript - this 指向的问题
PHP中文网
PHP中文网 2017-04-11 12:42:56
[JavaScript讨论组]
(function(){
    var a = 11111;
    console.log(this.a);    

    var Test = function(a){
        this.a = a;
    }
    Test.prototype.geta=function(){
        console.log(this.a)
        console.log(this);
    }
    var test = new Test('a');
    test.geta();      

    var getaaa = test.geta;
    getaaa();    

})()


getaaa()中 this 指向的是 window 但是为什么 this.a 为什么是 undefined

PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
阿神

因为题主没有在window上声明变量a,题主声明的变量在自执行函数里,属于自执行函数的局部变量,不属于window

大家讲道理
(function(){
    var a = 11111;
    console.log(this.a);  //[1] 

    var Test = function(a){
        this.a = a; //[2]
    }
    Test.prototype.geta=function(){
        console.log(this.a)
        console.log(this);
    }
    var test = new Test('a');
    test.geta();//[3]

    var getaaa = test.geta;//[4]
    getaaa();    

})()

[1] this指向全局winow对象或nodejs环境下的global变量, 在全局对象下,没有定义变量啊,所以输出undefined
[2] 当Test作为普通函数调用时,指向全局winow对象或nodejs环境下的global变量;作为构造函数通过new调用时,指向创建的Test实例对象
[3]getah函数作为test实例对象的一个方法调用,此时的this指向test实例对象
[4] getaaa指向一个普通的函数对象和test实例对象没有任何关系,getaaa调用时,this指向指向全局winow对象或nodejs环境下的global变量

阿神

不知道题主注意到前面的console(this.a)没,一样也是undefined,this一样是指向window。
关键是你声明的1111的a是在自执行函数里面的,而不是在全局,所以window.a并没有声明和赋值

高洛峰

window上没有这个属性,自然返回undefined

ringa_lee

第一行undefined就是window.a的输出值。
你去掉最外层的(function(){})()试试
(function(){})()本身的作用就是防止变量污染全局变量。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号