JavaScript中的this

本文探讨了JavaScript中的this关键字,指出其指向取决于所处的环境。JS中的对象在内存中以字典结构存储,函数作为独立实体可以跨环境运行。在不同环境中调用函数会导致this指向变化,例如obj.foo()中的this指向obj,而var foo = obj.foo后的foo与obj无关。
摘要由CSDN通过智能技术生成

一、JS中的this:

  • this的指向与this所处在的环境有关。
  • 在JS中this的设计与其内存的数据结构有关。
<script>
        var object = {
            foo:function(){
                alert(this.num)
            },
            num:1
        }

        var num = 2;
        var foo = object.foo
        
        foo()  //2,函数在全局环境下执行
        object.foo()//1,函数在object环境下执行
</script>

二、JS中存储对象:
      假设有obj={foo:3}这么一个对象。首先,JS会在内存里生成{foo:3}这么一个对象,然后将内存地址赋给object。如果你要读取foo属性的值,那么JS引擎就要在obj处取得地址,然后根据地址找到foo的原始对象,最后返回他的属性值。
原始的对象是字典结构:
在这里插入图片描述

{
  foo: {
    [[value]]: 3
    [[writable]]: true
    [[enumerable]]: true
    [[configurable]]: true
  }
}

foo属性的值保存在属性描述对象的value属性里

三、函数:
      与上所诉不同的是,在obj={foo:function(){}}对象中,函数将单独存储在内存中,(这意味函数可以在不同的环境中运行,只要你想要。)
然后将函数地址赋给,foo属性的value属性
在这里插入图片描述

{
  foo: {
    [[value]]: 函数的地址
    ...
  }}

在不同的环境下:

var f=function(){}
var obj={
    f:f
}

f();  //大环境下
obj.f();  //obj小环境下

四、环境变量:
      JS允许在函数体内部,引用当前环境的其他变量。

var f = function(){
            console.log(this.x);
        };
        var x = 5;
        var obj = {
            f:f,
            x:1,
        };
        f();    //5
        obj.f();    //1
    this.x指代的为运行环境的x。

回到最初:
      因为obj.foo()是通过obj对象找到foo函数的,所以运行环境就是obj对象。但是当,var foo = obj.foo时,foo指向本身与obj没有关系。
      参考文章:阮一峰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值