>웹 프론트엔드 >JS 튜토리얼 >JavaScript 모듈식 프로그래밍_javascript 기술

JavaScript 모듈식 프로그래밍_javascript 기술

WBOY
WBOY원래의
2016-05-16 15:11:521403검색

JavaScript 모듈형 프로그래밍의 중요성

JavaScript의 프로토타입은 객체 지향 프로그래밍 언어이자 약한 유형의 언어인 Java로 유연성이 뛰어납니다. 과거에는 자바스크립트 코드를 작성할 때 .js 파일을 하나씩 직접 작성한 다음 스크립트 태그를 사용하여 이를 html 페이지에서 참조했습니다.

1. 전역변수가 많습니다
Node.js는 어디에서나 전역 변수를 정의할 수 있습니다. 사양에 맞지 않는 내용을 작성하면 전역 변수가 많이 등장하게 되고, 결국 프로그램 유지 관리가 어려워지게 됩니다.
2. js 로딩 순서는 코드의 종속성 순서를 따라야 합니다
가장 간단한 것, 예를 들어 a.js는 b.js 파일에 따라 달라집니다. html에 스크립트를 도입할 때 b.js는 a.js보다 먼저 도입되어야 하며, 그렇지 않으면 오류가 보고됩니다. 프로젝트가 수십 개의 js 파일로 분할된 경우 특정 사양을 따르지 않으면 많은 수의 전역 변수가 나타나며 해당 종속성도 유지하기 어렵습니다.
3. HTML이 한 번에 너무 많은 js 스크립트를 로드하여 페이지가 일시 중지된 것처럼 보입니다.
초기화 중에 한 번에 너무 많은 js 스크립트를 로드하면 페이지가 일시 중지된 것처럼 보일 수 있습니다.
RequireJS를 사용하여 js 모듈형 프로그래밍 구현

  • RequireJS의 목표는 코드의 모듈화를 장려하는 것이며 기존 스크립트 태그와는 다른 스크립트 로딩 단계를 사용합니다. 이를 사용하여 코드 속도를 높이고 최적화할 수 있지만 주요 목적은 코드를 모듈화하는 것입니다. 스크립트를 사용할 때 URL 주소 대신 모듈 ID를 사용하는 것이 좋습니다. ——[RequireJS 공식 홈페이지]

RequireJS 사용법에 대해 너무 자세히 설명하고 싶지 않습니다. 자세한 내용은 직접 검색하거나 공식 홈페이지에서 알아보세요. 여기에는 RequireJS 모듈식 프로그래밍을 사용한 경험 중 일부를 기록합니다.

응용 시나리오는 프로젝트에서 타사 오픈 소스 라이브러리를 사용하는 것입니다. 그러나 GIS 전문가가 아닌 많은 IT 플레이어는 현재 일부 기본 개념을 이해하지 못할 수 있습니다. 라이브러리의 상위 계층은 인터페이스를 더 쉽게 이해할 수 있도록 하며, 작업 분담과 협업도 달성할 수 있습니다. 누구나 자신의 모듈을 작성하고 좋은 인터페이스를 예약하면 됩니다. 다음은 캡슐화의 작은 예입니다. 현재는 js 모듈화를 배우는 단계에 불과합니다. 크든 작든 이 사양에 따라 작성하겠습니다. 많은 이익을 얻습니다.

여기에서는 경량 오픈 소스 지도 라이브러리인 전단지를 사용합니다. 요구 사항은 점, 선 및 표면 그리기를 실현하기 위한 그래픽 그리기 클래스를 작성하는 것입니다. 코드는 직접 제공됩니다:

define(['leaflet'], function(){
  /**
   * 绘制多段线
   * @param options
   * @returns {*}
   * @private
   */
  var _drawLine = function(latlngs, options){
    return L.polyline(latlngs, options);
  };

  /**
   * 绘制多边形
   * @param options
   * @private
   */
  var _drawPolygon = function(latlngs, options){
    var polygon;
    if(latlngs.length < 3){
      console.log("点数少于3,无法绘制多边形!");
    } else {
      var firstPt = latlngs[0];
      var lastPt = latlngs[latlngs.length - 1];
      if(firstPt.equals(lastPt)){
        latlngs.pop();//移除与起点相同的终点
      }
      polygon = L.polygon(latlngs, options);
      return polygon;
    }
  };
  /**
   * 绘制矩形
   * @param bounds
   * @param options
   * @returns {*}
   * @private
   */
  var _drawRect = function(bounds, options){
    return L.rectangle(bounds, options);
  };
  /**
   * 绘制圆形
   * @param center
   * @param radius
   * @param options
   * @returns {*}
   * @private
   */
  var _drawCircle = function(center, radius, options){
    return L.circle(center, radius);
  };

  /**
   *封装,暴露公共方法
   */
  return {
    drawLine : _drawLine,
    drawPolygon : _drawPolygon,
    drawRect : _drawRect,
    drawCircle : _drawCircle
  }
})

전화 시 코드:

require(['drawHelper'], function(drawHelper){

 function drawLine(){
  var latlngs = new Array();
  for(var i = 20; i < 30; i++){
   for(var j = 100; j < 110; j++){
    latlngs.push(new L.latLng(i, j));
   }
  }
  var polylineOpt = {
   color : 'blue',
   weight : '2',
   opacity : 0.8,
   smoothFactor : 2.0
  };
  var polyline = drawHelper.drawLine(latlngs, polylineOpt);
  polyline.addTo(mainmap);
 };

 function drawPolygon(){
  var latlngs = new Array();
  latlngs.push(L.latLng(31, 110), L.latLng(31, 111), L.latLng(32, 111), L.latLng(32, 110), L.latLng(32, 109));
  var Opt = {
   stroke : true,
   color : 'blue',
   weight : '2',
   opacity : 0.8,
   fill : true,
   fillColor : 'red',
   fillOpacity : 0.6
  };
  var polygon = drawHelper.drawPolygon(latlngs, Opt);
  polygon.addTo(mainmap);
 }

 function drawRect(){
  var bounds = [[33, 110], [36, 113]];
  var Opt = {
   stroke : true,
   color : 'blue',
   weight : '2',
   opacity : 0.8,
   fill : true,
   fillColor : 'yellow',
   fillOpacity : 0.6
  };
  drawHelper.drawRect(bounds, Opt).addTo(mainmap);
 }

 function drawCircle(){
  var center = L.latLng(32, 116);
  var Opt = {
   stroke : true,
   color : 'red',
   weight : '2',
   opacity : 0.8,
   fill : true,
   fillColor : 'green',
   fillOpacity : 0.6
  };
  drawHelper.drawCircle(center, 200000, Opt).addTo(mainmap);
 }

 drawLine();
 drawPolygon();
 drawRect();
 drawCircle();
})

효과는 다음과 같습니다. 여기에 완전히 요약하지는 않았지만 충분합니다. 기본적인 지도 작업 및 레이어 제어를 위해 지도 컨트롤을 작성하여 통합 관리할 수 있습니다

위 내용은 JavaScript 모듈러 프로그래밍에 대한 논의입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.