Javascriptにthisの値について

Javascript

今回はjavascriptのthisについて紹介します。thisは存在したところによる、内容が変わるため、各パターンを理解すれば、javascriptの開発で役に立つ。

this種類

関数に存在したthis

この場合は「this」は「Windowオブジェクト」を指してしまいます。

function fun() {
     console.log(this); // Window
}

fun();

イベント関数に存在したthis

書き方①

<input type=’button’ id=’btn’ value=’click’>

<script type=”text/javascript”>
    document.getElementById(‘btn’).onclick = function() {
    console.log(this);   // ボータンオブジェクト
}
</script>

書き方②

<input type=’button’ id=’btn’ value=’click’>

<script type=”text/javascript”>
 function fun() {
       console.log(this); // ボータンオブジェクト
   }
    document.getElementById(‘btn’).onclick = fun;
</script>

書き方③

<input type=’button’ id=’btn’ value=’click’>

<script type=”text/javascript”>
    document.getElementById(‘btn’).onclick = () => {
        console.log(this);    // Window
    };
</script>

コンストラクタに存在したthis

「new」をつけてインスタンスを生成し、生成されるインスタンス自身が「this」にsetされます。

<script type=”text/javascript”>
    function Person() {
        this.name = “test1”;
        console.log(this);  // Person {name: “test1”}
    }
    var obj = new Person();
</script>

オブジェクトに存在したthis

書き方①

<script type=”text/javascript”>
    var obj = {
        “age”: 30,
        “say”: function() {
            console.log(this); // {age: 30, say: ƒ}
        }
    }
    obj.say();
</script>

書き方②

<script type=”text/javascript”>
    var obj = {
        “age”: 30,
        “say”: () => {
            console.log(this); // Window
        }
    }
    obj.say();
</script>

HTMLタグに存在したthis

<input type=’button’ id=’btn’ value=’click’ onclick=”fun(this)”>

<script type=”text/javascript”>
    function fun(obj) {
        console.log(obj);   // inputオブジェクト
    }
</script>

thisの注意点

注意点①

<script type=”text/javascript”>
var obj = {
    “name”: “test”,
    “obj2”: {“name”: “test2″,”walk”:function(){console.log(this);}}
}

obj.obj2.walk(); //{name: “test2”, walk: ƒ}
</script>

注意点②

<script type=”text/javascript”>
    function fun1() {
        console.log(this);     // Window
        function fun2() {
            console.log(this); // Window
        }
        fun2();
    }
    fun1();
</script>

注意点③

<script type=”text/javascript”>
    var obj1 = {
        “name”: “test1”,
        “walk”: function() {
              console.log(this);     // obj1
              var _this = this;
              var obj2 = {
                    “name”: “test2”,
                    “walk”: function() {
                        console.log(this);   //obj2
                        console.log(_this); //obj1
                     }
            }
            obj2.walk();
        }
  };
 obj1.walk();
</script>

this変える方法

apply

function fun1(para1,para2) {
    console.log(this,para1, para2);   
}

var obj1 = {
    “name”: “test”
}

fun1.apply(obj1,[1, 2]);// thisはobj1となる、実行される

call

function fun1(para1,para2) {
    console.log(this,para1, para2);   
}

var obj1 = {
    “name”: “test”
}

fun1.apply(obj1,1, 2);// thisはobj1となる、実行される

bind

function fun1(para1,para2) {
    console.log(this,para1, para2);   
}

var obj1 = {
    “name”: “test”
}

fun1.bind(obj1,1, 2);// thisはobj1となる、実行されない
fun1.bind(obj1,1, 2)();// thisはobj1となる、実行される
fun1.bind(obj1)(1, 2);// thisはobj1となる、実行される

タイトルとURLをコピーしました