문제

응, 좀 당황스럽네.

노드 창을 열고 다음을 입력하면 this.require 당신은 다음을 얻습니다:

[Function: require]
resolve: [Function],
main: undefined,
extensions:
{ '.js': [Function],
  '.json': [Function],
  '.node': [Function] },
registerExtension: [Function],
cache: {} }

이는 다음과 같은 기능을 의미합니다. require(args) 말하자면, 만들어졌습니다. require=function(){return resultOfOperation}

그때 누군가가 앞으로 다가와 이렇게 말했습니다. require.cache={} 나는 그 모든 것에 괜찮습니다. 그러나 캐시 객체는 어떤 용도로든 사용됩니다. require(args) 기능?requirejs 소스는 캐시 객체에 대해 전혀 언급하지 않으므로 다른 모듈 로더를 실행하고 있는지 아니면 이것이 단지 nodejs가 다른 동작을 추적하는 데 사용하는 것인지 궁금합니다.

질문은, "추가 속성이 할당된 함수가 실행 코드 본문 내에서 해당 속성에 액세스할 수 있습니까?" (바람직하게는 우수한 기능에 대한 지식 없이)

참고로 저는 이것이 C++로 엔진에 작성되었을 가능성이 있다는 것을 알고 있습니다. 저는 사람들이 자바스크립트로 이 작업을 수행할 수 있는 방법을 생각할 수 있는지 알고 싶습니다.

도움이 되었습니까?

해결책

우선 약간의 혼란이 있는 것 같습니다.노드의 require ~이다 ~ 아니다 RequireJS.그것들은 완전히 다른 두 가지입니다.

노드의 모듈 시스템에 대해 자세히 알아보려면 여기 관련 문서가 있습니다.여기 있습니다 필요한 문서.

두 번째 질문에 답하려면 자바스크립트의 함수는 객체입니다.위에서 설명한 것과 같은 작업을 수행하는 한 가지 방법은 다음과 같습니다.

var foo = function() {
    console.log(foo.cache);
};

foo.cache = {
    bar: 1
};

foo();
// Outputs { bar: 1 }

또 다른 방법은 더 이상 사용되지 않음 arguments.callee (그러니 집에서는 하지 마세요):

var foo = function() {
    console.log(arguments.callee.cache);
};

foo.cache = {
    bar: 1
};

foo();
// Outputs { bar: 1 }

다른 팁

마지막 질문:

추가 속성이 할당된 함수가 실행 코드 본문 내에서 해당 속성에 액세스할 수 있습니까?

함수의 전역 이름을 사용할 수 있습니다.예를 들어

var myFunc = function() {
    console.log(myFunc.a++);
}
myFunc.a = 1;
myFunc();
myFunc();

출력됩니다

1
2

이제 다른 질문

나는 그 모든 것에 괜찮습니다. 그러나 캐시 객체가 require(args) 함수에 사용됩니까?

예, require.cache가 사용되므로 동일한 모듈을 두 번 로드하면 동일한 개체를 반환하고 실제로 스크립트를 다시 로드하지 않습니다.node.js 문서를 확인하세요. require.cache: http://nodejs.org/api/globals.html#globals_require_cache

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top