• this


    1.在对象方法中,作为对象的一个方法被调用时,this指向调用它所在的方法的对象

    var obj={
        x:111,
        y:222,
        add:function(){
            console.log(this.x+this.y)
        }
    }
    obj.add()   //333

    2.在构造函数中的this

    通过new操作符来创建构造函数的实例对象,这个构造函数的this就指向这个新的实例对象。同时构造函数的prototype属性下面方法中的this也指向合格新的实力对象

    var arr1=[1,2,3];
    var arr2=new Array(4,5,6);
    console.log(arr1)  //(3) [1, 2, 3]
    console.log(arr2)(3) [4, 5, 6]
    
    function Abc(){
    this.num=100;
    }
    Abc.prototype.getNum=function(){
    return this.num
    }
    var a1=new Abc();
    a1.num=200; //存在这句话为200 不存在为100
    console.log(a1.getNum()) //200

    特例:

    var obj={
        add:function(){
            function fn1(){
                console.log(this)
            }
            fn1()
        }
    }
    obj.add()  
    //Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}

     3.call apply bind 显示修改this指向

    var obj1={
        name:'111',
        num:222,
        add:function(text,number){
            console.log(this.name+this.num+text+number)
        }
    }
    var obj2={
        name:'333',
        num:444
    }
    
    //apply:第二个参数是数组或者arguments参数集合
    //call:第二个参数和之后的参数可以使任意数据类型
    
    obj1.add();        //111222undefinedundefined   //this--指向obj1
    obj1.add.call(obj2,'555',['666',777])   //333444555666,777   this--指向obj2
    obj1.add.call()   //undefinedundefinedundefined  this--指向windows
    obj1.add.apply(obj2,[777,888])  //333444777888

    //调用bind()方法不会执行test()函数,也不会改变test()函数本身,只会返回一个已经修改了this指向的新函数,这个新函数可以赋值给一个变量,调用这个变量新函数才能只能t1()
    
    
    function test(x,y){
        console.log(x,y)
    }
    var obj={
        abc:123
    }
    var t1=test.bind(obj,200);
    t1(300,400)   //200 300
    test(10,200)  //10 200
    test.call(obj,600)  //600 undefined
    
    bind和call的区别
    1.bind的返回值是函数,并且不会自动调用执行
    2.两者后面的参数的使用也不同,call是把第二个及以后的参数作为原函数的实参传进去,而bind实参是在其传入参数的基础上往后获取参数执行。
  • 相关阅读:
    摄像机
    变换
    纹理
    从顶点数据中传入顶点位置和顶点颜色
    使用glew和glad 新建窗口
    openGL坐标系
    glViewport函数用法
    彻底搞懂CSS文本、空白换行问题
    Django 搭建
    HessianSharp如何部署到IIS7上?
  • 原文地址:https://www.cnblogs.com/susu2020/p/16361171.html
Copyright © 2020-2023  润新知