贪吃蛇

作者: 大庆无疆 | 来源:发表于2019-03-07 17:11 被阅读0次

    函数也是对象
    任何函数也有prototype属性,我们说只有对象才有属性和方法,所以函数也是对象,函数还有bind()方法和call()方法

    函数中的bind()方法,可以改变this的指向 ,创建并返回一个新函数

    call()方法,可以改变this的指向,与bind()不同的是他直接调用了函数

    // 常见的错误,要注意一下
    //声明一个对象
    var dx = {
        a: 123,
        method: function () {
            console.log(this.a);
        }
    }
    // 调用方法
    dx.method();//输出123
    //将方法赋给其他变量
    var other = dx.method;//这里不是调用method方法,注意
    other();//输出undefined,因为other里面的this指向的是window
    /*
    上面的other = dx.method相当于
    function other() {
        console.log(this.a);//函数中的this指向的是window
    }
    
    */
    
    下面要介绍我们的bind方法了,他的作用是创建并返回一个新的函数,第一个参数可以改变this的指向,如果函数还需要其他参数,可以继续在bind()里继续传
    other = other.bind(dx);//将之前this指向的window改为dx
    other();//此时输出的是123,因为上面我们使用bind()改变了this的指向
    
    //-------------------------------call()---------------------------------
    //call()可以改变this的指向,并调用函数
    function fn() {
        console.log(this);//此时this指向的是window
    }
    //创建一个对象
    var o = {
        name: 'o'
    }
    
    //直接调用函数;
    fn();//输出的是window
    // 使用call()方法
    fn.call(o);//此时输出的是o对象
    

    关于自调用函数

    1、需要在自调用函数前面加分号,后面不用加
    2、我们在看别人优秀代码的时候发现有给自调用函数传入参数(window, undefined)
    (1)自调用函数传入 window的目的,是让变量名可以被压缩
    (2) 在老版本的浏览器中 undefined 可以被重新赋值
    
    ;(function (window, undefined) {
      var Tools = {
        getRandom: function (min, max) {
          return Math.floor(Math.random() * (max - min + 1)) +  min;
        }
      }
      // 暴露Tools给window
      window.Tools = Tools;
    })(window, undefined)
    

    相关文章

      网友评论

          本文标题:贪吃蛇

          本文链接:https://www.haomeiwen.com/subject/rfwcpqtx.html