jQuery 플러그인 개발 방법

5997 단어

    
    1.jQuery.extend(object);jQuery 클래스 자체를 확장하기 위해서입니다.클래스에 새로운 방법을 추가합니다.전역 함수로 호출하는데 주로 전역 함수를 확대하는 데 쓰인다.jQuery.fn.extend(object);jQuery의 실례 대상에 추가하는 방법은 실례 대상에서 호출되며, 예를 들어 $.fn.each();
extend
정적 방법을 추가합니다. 이 확장 방법을 $로 직접 호출합니다.
$.extend({
    test:function(param){
        alert(param);
    }
});
$.test(1);//     1

$.test(1)는 jQuery라는 클래스 자체의 방법이 되었다.
extend 확장:
  • extend([deep ], target, object1,object2,object3,objectN)

  • Object1, Object2, Object3을...target에 합치면 합쳐진 target으로 되돌아옵니다. 이 방법은 합쳐진 후에 target의 구조를 수정한 것을 알 수 있습니다.
    뒤에 있는 매개변수가 앞에 있는 매개변수와 이름이 같으면 뒤에 있는 매개변수가 앞에 있는 매개변수 값을 덮어씁니다.
    deep: Boolean이 true로 설정되어 깊이 복사됨
    fn.extend
     $.fn.extend({
               test:function(){
                   alert("1");
               }
                   });
     
     $("div").test();

    test () 가 jQuery 실례화 대상이 되는 방법입니다.
     
     
    심도 있는 복사
    만약에 하나의 변수에 하나의 대상을 부여한다면 양자의 값은 같은 인용이고 그 중의 한 쪽을 바꾸면 다른 한 쪽도 상응하여 바뀔 것이다.
    통과Object.assign   
    let a = {
        name: "  "
    }
    let b = Object.assign({}, a)
    a.name = "  ";
    console.log(b.name) // "  "
    //           (…)   
    
    let b = {...a}
    a.obj.name="  ";
     console.log(b.name) //"  ";

     
    얕은 복사는 1층 문제만 해결하고 이어지는 값에 대상이 있다면 똑같은 인용이 있을 것이다.
    let a = {
        name: "  ",
       obj:{
        name:"  "
      }
    }
    let b = {...a}
    a.obj.name="  ";
     console.log(b.obj.name) //"  ";

      JSON.parse(JSON.stringify(object))로 해결할 수 있습니다.
    let a = {
        name: "  ",
       obj:{
        name:"  "
      }
    }
    let b =  JSON.parse(JSON.stringify(a))
    a.obj.name="  ";
     console.log(b.obj.name) //"  ";

     
    이 함수는 내장 함수 중 가장 빠른 깊이 복사 처리 성능이지만 이 방법에는 한계가 있습니다.
  • 무시undefined
  • 함수를 서열화할 수 없음
  • 순환 인용의 대상을 해결할 수 없음
  • let a = {
        a: undefined,
        b: function() {},
        c: 'yck'
    }
    let b = JSON.parse(JSON.stringify(a))
    console.log(b) // {c: "yck"}

     
    물론 당신의 데이터에 상기 세 가지 상황이 포함되어 있다면lodash의 깊은 복사 함수를 사용할 수 있습니다.
    만약 복사할 대상이 내장 형식을 포함하고 함수를 포함하지 않는다면 사용할 수 있습니다 MessageChannel
     1 function structuralClone(obj) {
     2   return new Promise(resolve => {
     3     const {port1, port2} = new MessageChannel();
     4     port2.onmessage = ev => resolve(ev.data);
     5     port1.postMessage(obj);
     6   });
     7 }
     8 
     9 var obj = {a: 1, b: {
    10     c: b
    11 }}
    12 //          
    13 //      undefined        
    14 const clone = await structuralClone(obj);

     

    좋은 웹페이지 즐겨찾기