복붙노트

[NODEJS] Node.js를 모듈 및 기능에서 "이"의 의미

NODEJS

Node.js를 모듈 및 기능에서 "이"의 의미

해결법


  1. 1.다음은 상황을 명확히 이해해야합니다 몇 가지 기본적인 사실입니다 :

    다음은 상황을 명확히 이해해야합니다 몇 가지 기본적인 사실입니다 :

    첫 번째 내부 노드 생성 모듈 래퍼 함수이며 번째 aFunction 내부있다 : 다른 내부 기능 각각이 상주 있기 때문에,이 값은 다른 얻는다.


  2. 2.이것을 이해하기 위해서는 Node.js를 실제로 다음과 같이 함수에 모듈의 코드를 감싸는 것을 이해할 필요가있다

    이것을 이해하기 위해서는 Node.js를 실제로 다음과 같이 함수에 모듈의 코드를 감싸는 것을 이해할 필요가있다

    (function (exports, require, module, __filename, __dirname) {
        var test = function(){
            console.log('From test: '  + this);
        };
        console.log(this);
        test();
    });
    

    상세 설명은이 답변에서 찾을 수 있습니다.

    자,이 포장 기능은 실제로 다음과 같이 호출

    var args = [self.exports, require, self, filename, dirname];
    return compiledWrapper.apply(self.exports, args);
    

    그래서,이 모듈 레벨에서, 실제로 수출 객체입니다.

    이 같은 사항을 확인 할 수 있습니다

    console.log(this, this === module.exports);
    // {} true
    

  3. 3.함수가 호출 될 때 자바 스크립트로,이 값은 결정된다. 함수가 생성됩니다하지 않는 경우. 모듈의 최 nodeJS 범위에서,이 값은 현재 module.exports 개체이다. 함수를 객체의 속성이라하면,이 값은 호출 된 객체를 변경한다. 당신은 단순히 왼쪽 - 중 - 점 규칙에 의해이 기억할 수 :

    함수가 호출 될 때 자바 스크립트로,이 값은 결정된다. 함수가 생성됩니다하지 않는 경우. 모듈의 최 nodeJS 범위에서,이 값은 현재 module.exports 개체이다. 함수를 객체의 속성이라하면,이 값은 호출 된 객체를 변경한다. 당신은 단순히 왼쪽 - 중 - 점 규칙에 의해이 기억할 수 :

    주의 사항 :

    console.log(this);  // {} , this === module.exports which is an empty object for now
    
    module.exports.foo = 5;
    
    console.log(this);  // { foo:5 }
    
    let obj = {
        func1: function () { console.log(this); },
        func2: () => { console.log(this); }
    }
    
    obj.func1();  // obj is left of the dot, so this is obj
    obj.func2();  // arrow function don't have their own this
                  // binding, so this is module.exports, which is{ foo:5 } 
    

    산출:


  4. 4.Node.js를 모듈의 기본 전역 객체가 수출 객체이기 때문이다, 당신은이를 지정하지 않음) (시험을 요구하고있다. 기존의 JS에서 전역 객체에이 점은 엄격한 사용하여,이 null이됩니다.

    Node.js를 모듈의 기본 전역 객체가 수출 객체이기 때문이다, 당신은이를 지정하지 않음) (시험을 요구하고있다. 기존의 JS에서 전역 객체에이 점은 엄격한 사용하여,이 null이됩니다.

    어떤이 캔 포인트, 그냥 당신이 그것을 호출 방법에 따라 달라집니다.

    thefourtheye의 답변을 맞서

    이 모듈의 최상위이 수출 것은 사실이지만, 그것은 반드시이 내부 테스트는 ()도 같은 일을 가리킨가 호출 된 곳으로 것을 의미하지 않는다.

    수출 두 지점이 있음을 증명 전역 객체하려고

     myGLobal = 5;
     this.myGlobal; // 5
    
  5. from https://stackoverflow.com/questions/22770299/meaning-of-this-in-node-js-modules-and-functions by cc-by-sa and MIT license