JavaScriptにおけるthisの使用概要

1837 ワード

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、appy及びbindに分けられます.
優先度:明示的なバインディングの優先度が最も高い(陰的、デフォルト、およびnewバインディングより大きい).そして、bind優先度はcallおよびappyより大きい.
    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、ES 6は、明示的なバインディングに対して新たな拡張を行った.varが返したオブジェクト=オブジェクト・bind(バインディングするオブジェクト)