작동 원리 - 사용자 정의 정렬 연산자 [...5]

11490 단어 es6webdevjavascript

다음은 available as a blog post입니다.
자바스크립트에서 spread operator은... (3점) 은 기본적으로 하나의 그룹, 대상 또는 문자열을 받아들여 항목을 복사, 확장, 합병 또는 다른 변수로 통합할 수 있음을 나타낸다.
우리는 연구rest parameters를 하지 않을 것이다. 그것은 확산산자와 유사해 보이지만 분해수와 대상에 쓰인다.

예:


var str = "Hello World";
console.log(...str); // H e l l o   W o r l d

var obj = { name: "My Car", modelYear: "2018" };
var obj2 = { model: "Ferrari" };
console.log({ ...obj, obj2 }); // { "name": "My Car", "modelYear": "2018", "model": "Ferrari" }

var arr = [1, 2, 3, 4, 5];
console.log(...arr); // 1 2 3 4 5
우선, 우리는 그것의 장점과 단점, 그리고 그것이 어떻게 작동하는지, 그리고 그것을 실시할 것이다.
결점부터 시작합시다.

사기:

  • 복제에 사용할 수 있지만 레벨 1에 도달할 수 있습니다.따라서 다차원 그룹과 심층 대상에는 적용되지 않는다.
  • 객체의 열거 가능 속성만 전파할 수 있습니다.
  • 객체에만 적용됩니다.
  • 이것은 그룹과 대상 데이터 형식에 동시에 적용되지만 혼합하고 일치할 수 없습니다.
  • iterable 회사 찬성 의견:

  • 만약 우리가 단지 하나의 대상 자신의 속성을 복제하고 싶다면, 그것은 이 대상을 얕은 층으로 복제하는 데 사용할 수 있다.

  • 병합하거나 복제할 때 문법이 더욱 뚜렷하고 코드가 더 적다.
  • 함수나 수학 방법과 함께 사용할 수 있으며 필요하지 않습니다.apply () 방법은 여러 개의 매개 변수를 전달합니다.
  • 유사한 패턴의 객체를 실제 패턴으로 변환하는 데 사용됩니다.(예: DOM의 노드 목록)
  • 이제 우리는 확산 계산이 무엇인지, 그것이 무엇을 할 수 있는지, 무엇을 할 수 없는지 알게 되었다.
    사용자 정의 확장 연산자를 한 걸음 한 걸음 실현합시다.
    예: 사용자 정의 정렬 연산자 [...5]
    // This is how our Custom Spread Operator will look like
    console.log([...5]); // [1, 2, 3, 4, 5]
    
    // Above custom spread operator will not work now and
    // We will get the following error
    // Uncaught TypeError: number 5 is not iterable (cannot read property Symbol(Symbol.iterator))
    

    1단계:

  • 우리는 사용자 정의 배열 연산자를 작성할 것이다.
  • 상징교체기 부호가 뭐예요?교체기?


  • 상징교체기는 사용자 정의 교체기 함수를 만듭니다. (ES6 이전에는 불가능합니다.)
  • 이 프로토콜은 교체기 프로토콜을 사용합니다. 이 프로토콜은 유한 또는 유한 값 서열을 생성하고 모든 값을 완성하거나 생성할 때 이 값을 되돌려주는 표준 방법을 정의합니다.
  • Iterable 데이터 원본은 배열, 집합, 매핑, 대상, 매개 변수와 DOM 데이터 구조(예: 노드 목록) 등입니다.
  • 상징교체기는 두 부분을 포함한다.
  • 키가 기호인 물체.교체기 호출Iterable.
  • 상기 키의 함수 호출Iterator은 그 값을 교체하여 전달한다.
  • 예:
    var myCustomIterator = {
      [Symbol.iterator]: function() {},
    };
    
    간단하죠?😆
    다음 예시에서 더 많은 정보를 알기 위해 간단한iterable 함수를 만들 것입니다.
    👉🏻 주의: 기본적으로 함수는 교체할 수 없습니다.
    // A simple function which will accept a parameter called `n`
    // and it return myCustomIterator.
    
    var generateNumbers = function(n) {
      var myCustomIterator = {
        [Symbol.iterator]: function() {
          var i = 1; // Statement 1
          return {
            next: () => {
              return {
                value: i++, // Statement 3
                done: i === n + 2, // Statement 2
              };
            },
          };
        },
      };
    
      return myCustomIterator;
    };
    
    generateNumbers(); // return an iterable function
    
    위의 코드 설명:
  • generateNumbers() 함수는 호출할 때 대상을 되돌려줍니다.
  • 되돌아오는 대상은 next()라는 방법을 포함하고 두 개의 속성을 가진 대상을 거꾸로 되돌려줍니다. 이 두 속성을value &done라고 합니다.
  • 방법next()은 매번 교체할 때 호출됩니다.
  • 속성을 for 순환 중의 세 번째 문장(예를 들어 for(문장 1, 문장 2, i++)으로 간주한다.
  • value속성을 for순환 중의 두 번째 문장으로 간주한다(예를 들어 for(문장1;i==n+2;i++)
  • 우리는 초기값 i를 1에서 n으로 증가시킬 것이다.
  • 우리의 done 적용을 확보하기 위해서, 우리는 다음 예시에서 of와 확장 연산자 순환에 사용할 것이다.
    for (var i of generateNumbers(5)) {
      console.log(i); // prints from 1 to 5
    }
    
    // It works 😆
    
    // Now we can do this
    [...generateNumbers(5)]; // prints from 1 to 5
    
    // TADA 😁
    
    멋있죠?우리는 함수를 이식할 수 있게 했다.
    우리의 다음 단계이자 마지막 단계에서, 우리는generateNumbers()를 본기 특성으로 삼아, 우리가 이렇게 할 수 있도록generateNumbers() [...5] 한다.

    예:


    // Add Symbol.iterator to Number prototype
    Number.prototype[Symbol.iterator] = function() {
      var i = 1; // Statement 1
      return {
        next: () => {
          return {
            value: i++, // Statement 3
            done: i === this + 2, // Statement 2
          };
        },
      };
    };
    
    // Now I can do this 🤪
    console.log([...5]); // [1, 2, 3, 4, 5]
    

    마지막 생각


    위원회와 TC39규범 덕분에 우리는 확장 연산자를 사용하여 자신의 사용자 정의 교체기 함수를 작성할 수 있다.당신들이 기호를 어떻게 사용할지 매우 알고 싶습니다.이제 교체기를 이해하셨습니다.
    만약 네가 좋아한다면 밀어라.오늘 자바스크립트에 관한 새로운 지식을 배울 수 있기를 바랍니다.
    다음 글은 가상 DOM의 작동 원리입니다.구독하지 않으셨다면 아래에서 구독하시기 바랍니다:D
    ES6

    여기에 가입 참고 문헌:

  • MDN
  • Spread operator TC39 specification
  • 좋은 웹페이지 즐겨찾기