美文网首页
JavaScript中this的使用概括

JavaScript中this的使用概括

作者: vinterx | 来源:发表于2017-04-08 21:29 被阅读0次

1、this的默认绑定(this == window)

    function foo(){
        console.log(this == window)//true
    }
    foo(); 

2、new绑定:this指代将来创建的那个对象

    function Person(){
        this.name = "李四";
        console.log(this)//this指代p
    }
    var p = new Person();

3、隐式绑定:对象.方法()

       var p = {
        name : "abc",
        foo : function (){
            console.log(this.name);//this指代p
        }
    }
    p.foo();
    
    //----------------------
    var name = "李四";
    function foo(){
        console.log(this.name);
    }
    var p = {
        name : "abc",
        foo : foo
    }
    p.foo();// abc
    foo(); // "李四"
    //------------
     var p = {
        name : "abc",
        foo : function (){
            console.log(this.name);
        }
    }
    var f = p.foo;
    var name = "李四";
    f();  // 李四
    //---------------
         var p = {
       name : "李四",
       inner : {
           name : "张三",
           foo : function (){
               console.log(this.name);
           }
       }
   }
   var name = "王五";
   p.inner.foo();//张三

4、显式绑定

主要分为call、apply以及bind

优先级:显式绑定优先级最高(大于隐式、默认及new绑定),且bind优先级大于call和apply

    var name = "a"
    function foo(){
        console.log(this.name);
    }
    //永远绑定this,返回值就是绑定成功的那个函数。  对原来的函数没有任何的影响
    var foo1 = foo.bind({name : "b"})
    foo1()  // b
    foo1.call({name : "c"})  // b

a、显式绑定时,如果传入的是null, undefined的时候this的绑定丢失问题!this变成window

b、如果传入的是基本类型如数值,则返回undefined,因为相当于new Number(数值)--万物皆对象

c、ES6对显式绑定做了一个新的 扩展。
var 返回的对象 = 对象.bind(要绑定的对象)

相关文章

网友评论

      本文标题:JavaScript中this的使用概括

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