JS中的this到底指什么?


this指向其实并不复杂,很多面试中也是算一个基础,说难不是很难,但说简单,也不是特别的简单,掌握着4步,this指向不用愁

1.两个概念,了解4中this指向的绑定规则

1.1两个概念

this指向只有在函数调用的时候,才会确定,才有意义
第一个概念:谁调用,this指向谁
第二个概念:立即执行函数,this永远指向window

1.2this指向的4种绑定规则

this的绑定永远逃离不了这四种规则,掌握4中规则,走遍天下面试this都不怕。首先看下4种绑定的规则:
【默认绑定】【隐藏绑定】【显示绑定】【new实例化】

1.2.1 默认绑定规则

默认this指向window,在全局函数里也是指向window

   <script>
        //默认绑定规则
        //第一种情况
        console.log(this)
        // console.log(this === window)    

        // 函数种this也是指向window 因为aaa就是绑定在window下的 符合1.1的概念
        function aaa (){
            console.log(this)
        }
       aaa()
    </script>

1.2.2 隐藏绑定

顾明思议,隐藏绑定就是函数执行时,产生自己的this,并指向某一个对象。也符合1.1的概念,举个例子

     // 隐藏绑定
    var obj = {
        wang:"awesome",
        foo:function(){
            console.log(this)
        }
    }
    obj.foo()  //bobj

在对象里的立即调用函数,this指向谁呢?

    var obj = {
        wang:"awesome",
        foo:function(){
            // console.log(this)
            function foo2 (){
                console.log("foo2's this " + this)
            }
            foo2()
        }
    }
    obj.foo()   //window

指向window ,因为他符合1.1的第二个概念,毋庸置疑,肯定是window

也可以这样写

    <script>
      // 隐藏绑定
    var obj = {
        wang:"awesome",
        foo:function(){
            // console.log(this)
           (function  (){
               console.log(this)
            })()
        }
    }
    obj.foo()  //window

    </script>

1.2.3 显示绑定 (call applay bind)

    // 显示隐藏
    var obj = {
        wang:"awesome",
        foo:function(){
            console.log(this)
        }
    }
    var obj2 ={
        wang:"cool",
        foo:function(){
            console.log(this)
        }

    }
    obj.foo.call(obj2)   // obj2
    obj2.foo.call(obj)    //0bj1

1.2.3 new关键词绑定

   <script>
        function Foo (obj){
            this.a = obj.a
            this.b = obj.b
        }
        let obj = {
            a:"wang",
            b:"awesome"
        }
        let obj2 = {
            a:"wang2",
            b:"acoll"
        }
        let foo1 =  new Foo(obj)
        let foo2 =  new Foo(obj2)
        console.log(foo1)    // obj
        console.log(foo2)    // obj2

    </script>

1.3留个小尾巴

下面这个a的this 是指向谁呢?

<script>
     var obj = {
        wang:"awesome",
        foo:function(){
            console.log(this)
        }
    }

   var a = obj.foo
   a()

    </script>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript,"sprite"一词并不是一个原生的概念,它通常用于游戏开发的上下文。在游戏开发,sprite的是游戏画面上的一块独立的图形元素,它可以是一个角色、一个物品或者其他任何图像。每个sprite都有自己的位置、大小和视觉表示,通常用于表示游戏的动态元素。 在JavaScript使用sprite,通常需要借助一些游戏开发框架或者库,比如Phaser、PixiJS等。以下是使用sprite的基本步骤: 1. 加载资源:首先需要加载你想用作sprite的图片资源。 2. 创建sprite对象:使用框架提供的方法创建sprite对象,并设置其在游戏的位置和尺寸。 3. 更新和渲染:在游戏的主循环更新sprite的状态,比如位置、动画帧等,并将其渲染到游戏画面上。 举个简单的例子,假设我们使用Phaser框架来创建一个简单的sprite: ```javascript // 创建游戏场景 var game = new Phaser.Game(800, 600, Phaser.AUTO, 'game'); // 添加游戏状态 game.state.add('main', { preload: function() { // 加载图片资源 game.load.image('player', 'images/player.png'); }, create: function() { // 创建sprite对象 this.player = game.add.sprite(100, 100, 'player'); }, update: function() { // 更新sprite状态,例如移动 this.player.x += 1; } }); // 启动游戏状态 game.state.start('main'); ``` 在这个例子,我们加载了一个名为'player'的图片资源,创建了一个位于(100,100)位置的sprite,并且在游戏的更新周期使这个sprite沿着x轴移动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值