[JavaScriptのクリーンアップ]コンテキスト3を実行します.this


this

= 클래스로 생성한 인스턴스 객체
= 실행 컨텍스트가 생성될 때 함께 결정됨(실행컨텍스트가 실행될 때 = 함수가 호출될 때)
= 해당 함수를 호출한 주체에 대한 정보를 가지고 있다.

グローバルスペース

  • グローバル空間では、これはグローバルオブジェクトです.
  • 	let a = 1;
    
    	a = window.a = this.a;
  • JavaScriptのすべての変数は、グローバルオブジェクトのpropertyとして割り当てられます.(l.eに格納)
  • メソッドのthis


  • メソッド=JavaScriptでは関数と非常に似ていますが、関数とは異なり独立性はありません.
  • は、一般に、オブジェクトとしてのProperty割当ての関数として理解される.
  • オブジェクトのpropertyとして割り当てられた関数であっても、オブジェクトのメソッドとしてのみ呼び出されます.
  • let a = function (b) {
     	console.log(this, b) 
    }
    
    a('a'); //여기서 this는 전역객체(window)
    
    let c = { method: a };
    
    c.a('a'); // 여기서 this는 c 객체
  • 関数とメソッドの区分は、オブジェクトのプロパティを呼び出すときです.[]で歌っているので、それらがなければ関数で、方法があれば.(前にオブジェクトを指定する必要があります.この場合、これはポイントの前に指定するオブジェクトです)
  • .

    関数のthis

  • 関数の
  • 関数が関数として呼び出されると、グローバルオブジェクトになります.
  • (明確なコール主体がない)
  • メソッドの
  • 	let a = {
        	outer: function () {
            	console.log(this);  
            
            	let inner = function () {
                	console.log(this);  
                }
                
                inner(); // this = window
                
                let b = {innerMethod: inner};
                
                b.innerMethod(); // this = b
            }
        }
        
        a.outer(); // this = a
    - 함수앞에 .이나 []가 있는지 없는지가 this를 판별하는 방법임.(메서드인지 함수인지, 메서드면 this는 앞에 객체, 함수면 this는 전역 객체)

    bind

  • メソッドの内部関数においてオブジェクト
  • とする.
    	let a = {
      outer: function () {
        console.log(this); // this = outer
        
        let innerfunc = function () {
          console.log(this);
        };
        
        innerfunc(); // this(innerfunc의 this) = window
        
        let self = this;  // outer의 this를 담음
        
        let innerfunc2 = function () {
          console.log(self);
        };
        
        innerfunc2();  // this = outer
      }
    };
    
    obj.outer();
  • es 6から矢印機能が使えるので不要です.
  • Arrow Function (es6)
    =このアイテムはバインドされません.
    =thisにアクセスする場合は、最近のthisにアクセスします.
    let obj2 = {
     outer: function() {
       let inner = () => {
         console.log('this',this);
       };
       
       inner(); ///this = outer
     }
    };
  • obj2.outer();
    
    3. 생성자 함수 내부에서
    	- 클래스 = 생성자, 인스턴스 = 클래스로 만든 객체.
        - 자바스크립트에서는 함수가 생성자의 역할을 가진다.
        - 예시 
        
    ```javascript
    	let Cat = function (name, age) {
    		this.name = name;
      		this.age = age;
    	};	//생성자
    
    	let choco = new Cat('choco', 2); // {name: 'choco', age: 2} --> 인스턴스
    
  • bind法
  • を用いる
    let abc = function (x){
      console.log(this, x);
    };
    
    let bindabc = abc.bind({x: 1}, 1); ///첫번째 인자에 바인딩 되고 추가로 인자를 넘겨줄 수 있음.
    
    bindabc(); // this = {x:1}
  • cf)callは、applyメソッドを使用して最初のパラメータにバインドできます.
  • 	let abc = function (x){
      console.log(this, x);
    };
    
    let callabc = abc.call({x: 1}, 1); ///첫번째 인자에 바인딩 되고 추가로 인자를 넘겨줄 수 있음.
    let applyabc = abc.apply({x:1}, [1]); //call과 같지만 추가 인자가 배열로 들어감
    
    callabc; // this = {x:1} , 1
    applyabc; // this = {x:1}, undefined