JavaScript에서 '정의'는 무엇입니까?


161

나는 이것에 관한 문서를 찾기 위해 높고 낮게 검색했지만 어디에서나 찾을 수는 없습니다.

Aloha를 사용하고 있으며 사이드 바 프로토 타입을 사용하여 다른 플러그인 기능에 연결된 새로운 사이드 바를 만들고 싶습니다.

그들의 sidebar.js는 이것으로 시작하지만, 나는 그것이 무엇을 의미하는지 설명하는 문서를 찾을 수는 없습니다.

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {

그런 다음, 함수의 무리를 정의하는 래퍼에서 일어나는 때문에 vars일부 proptotypes- 내가 막 주위에 내 머리를 얻을 수있는 ...

그 말은 무엇이며 어디에서 설명을 찾을 수 있습니까?


답변:


173

전체 스크립트를 보지 않고도 확실하게 말할 수는 없지만 defineRequireJS 의 함수 , 특히 해당 함수의 " 종속성으로 정의 "형식 일 가능성이 높습니다 . "모듈"을 정의하는 데 사용됩니다.

모듈은 전역 네임 스페이스를 오염시키지 않는 범위가 지정된 개체를 정의한다는 점에서 기존 스크립트 파일과 다릅니다. 전역 객체를 참조 할 필요없이 해당 종속성을 명시 적으로 나열하고 해당 종속성을 처리 할 수 ​​있지만 대신 모듈을 정의하는 함수에 대한 인수로 종속성을받습니다.

그리고 "종속성으로 정의"형식은 define다음과 같이 설명됩니다.

모듈에 종속성이있는 경우 첫 번째 인수는 종속성 이름의 배열이어야하고 두 번째 인수는 정의 함수 여야합니다. 모든 종속성이로드되면 모듈을 정의하기 위해 함수가 호출됩니다. 함수는 모듈을 정의하는 객체를 반환해야합니다.


1
그렇습니다. 확실히 require.js의 일부이고 해당 마크 업을 사용하려면 requirejs.org
— David O'Sullivan

4
그리고 어떤 IE 버전이 이것을 지원하지 않는 ... ;-)
— Simon_Weaver

1
@Simon_Weaver-무슨 뜻인지 모르겠다 ... RequireJS는 IE6 +에서 지원된다 .
— James Allardice

알아두면 좋을 것 같습니다.) 저는 다소 애국심이 있었지만 이것이 IE6보다 새로운 구조라고 생각했습니다
— Simon_Weaver

1
@Simon_Weaver Javascript 언어 구문이 아니며 일반적인 Javascript 함수입니다. 대괄호는 배열을 만듭니다. 아니면 당신이 언급 한 구조물이 있습니까?
— Robin Green

3

이것은 모듈을 작성하기위한 AMD 패턴입니다. AMD는 모듈을 commonJS가 아닌 비동기 적으로 가져와야 할 때 비동기 모듈 정의를 나타냅니다.

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

Define은 일련의 종속성을 취하고 모든 차단이 비 블로킹 방식으로 백그라운드 (비동기)에로드되면 콜백을 호출하여 인수 (이 경우 종속성)를 수락합니다.

주목해야 할 또 다른 사항은 해당 모듈 각각은 "define"키워드를 사용하여 정의해야한다는 것입니다. 예를 들어 module1은 다음과 같이 정의됩니다.

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

이 모듈 작성 방법 (AMD)을 사용하면 브라우저와의 호환성을 염두에두고 (nodeJS와 같은 require () 필요 없음) 객체, JSON 등을 포함한 많은 형식을 정의 할 수 있으며, 예를 들어 commonJS는 모듈이 객체가되어야합니다.

AMD는 자체 단점을 가지고 있음을 명심하십시오. 이것이 누군가를 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.