jsの中でthisは問題の実例を指して詳しく解説します.

2652 ワード

JSの中で、thisの値はいったい何ですか?
数ヶ月前に、「javascript言語の精髄」を拝見しました.中にはこの問題について、いい説明ができました.
JSでは、thisの値は呼び出しモードに依存しますが、JSでは4中呼び出しモードがあります.
  • 方法でモードを呼び出すと、関数がオブジェクトの属性として保存されているとき、方法として呼び出されたときに、thisはオブジェクトを指します.
    var obj = {
     value: 1,
     getValue: function() {
      alert(this.value);
     }
    };
    obj.getValue(); //   1,    this  obj
    注意:このモードでは、オブジェクトへのthisのバインディングは、メソッドが呼び出されたときに発生します.
  • 関数コールモードは、関数がオブジェクトの属性ではない場合、関数として呼び出され、このときのthisはグローバルオブジェクト(window)を指します.
    window.value = 1;
    function getValue() { alert(this.value); }
    getValue(); //   1,    this  window.
  • コンストラクタ起動モードがnewプレフィックスと結合して呼び出された関数をコンストラクタ関数と呼び、このときのthisはコンストラクタ関数の実例的なオブジェクトを指しています.
    function show(val) {
     this.value = val;
    };
    show.prototype.getVal = function() {
     alert(this.value);
    };
    var func = new show(1);
    func.getVal(); //   1
    alert(func.value) //   1
    //       ,     ,    this   func  .
  • appy/call呼び出しモードapplyとcall方法は、私たちが調整者の中のthisが誰を指すかを設定することができます.
    var fun = function(str) {
     this.status = str;
    }
    fun.prototype.getStatus = function() {
     alert(this.status);
    }
    var obj = {
     status: "loading"
    };
    fun.prototype.getStatus.apply(obj); //   "loading",   getStatus    this   obj