javascript - this的作用域问题
怪我咯
怪我咯 2017-04-11 12:28:06
[JavaScript讨论组]

function Card(num,suit){

this.num = num;
this.suit = suit;

}
这里的this指向什么呢,最好举个例子

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(6)
PHP中文网

this的指向不是在声明的时候确定的而是在调用的时候被定义的有这么几种情况

1. 普通函数调用,this为全局对象或是undefined
2. 作为对象的方法,this为那个对象
3. new 表达式,this为以该函数为原型的新创建的对象
4. 使用 apply/call指定 this
5. 用bind绑定固定的this
6. 事件处理函数中的this是当前的触发事件的DOM元素(event.currentTarget)
天蓬老师

看你怎么用,this只有在你使用的时候才能确定其指向

function Card(num,suit){
  this.num = num;
  this.suit = suit;
}

创建对象

var obj=new Vard(1,2)

this指向一个以Card.prototype为原型的空对象

Card(1,2)

this指向 window对象

var obj={}
Card.call(obj,2,3)

this指向obj对象

阿神
var a = new Card(1,2);
a.num ; // 1
a.suit ;// 2

this指向你new出来的a

PHP中文网

这里的 this 指向执行时所在的对象

比如,立即函数:

Card(2, 3)

这里的 this 指向 window,(非严格模式),

再比如,如果是对象的方法,

var obj = {};
obj.card = Card;
obj.card();

这个时候 this 指向 obj 啦。

call apply 还能指定 this 的指向。

所以要函数执行的时候,才能得知 this 的指向。

PHP中文网

以上的都说的差不多了,我再补充一个ES6中箭头函数的this指向:

    let person = {
    name: "galler",
    speak: ()=> {
            console.log(this);//window
            console.log(this.name); //""
        }
    };
person.speak();

函数本身是没有this的,只能向外找this继承,找到后发现this指向window(浏览器环境),而window下没有name属性,所以this.name = ""(空)

PHPz

http://mp.weixin.qq.com/s/DZp...
写的相当的不错,总结的很好

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

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