복붙노트

[JQUERY] 자기 스트랩 = DISS?

JQUERY

자기 스트랩 = DISS?

해결법


  1. 1.이 질문은 일반적으로 자바 스크립트 jQuery를 특정하지만, 특정되지 않습니다. 핵심 문제는 방법 "채널"내장 기능의 변수이다. 이것은 예입니다 :

    이 질문은 일반적으로 자바 스크립트 jQuery를 특정하지만, 특정되지 않습니다. 핵심 문제는 방법 "채널"내장 기능의 변수이다. 이것은 예입니다 :

    var abc = 1; // we want to use this variable in embedded functions
    
    function xyz(){
      console.log(abc); // it is available here!
      function qwe(){
        console.log(abc); // it is available here too!
      }
      ...
    };
    

    이 기술은 클로저를 사용하는 방법에 의존하고있다. 이 동적 범위를 범위에서 변경 될 수 있습니다 의사 변수이기 때문에 그러나이 작동하지 않습니다 :

    // we want to use "this" variable in embedded functions
    
    function xyz(){
      // "this" is different here!
      console.log(this); // not what we wanted!
      function qwe(){
        // "this" is different here too!
        console.log(this); // not what we wanted!
      }
      ...
    };
    

    우리는 무엇을 할 수 있습니까? 일부 변수에 할당하고 별칭을 사용 :

    var abc = this; // we want to use this variable in embedded functions
    
    function xyz(){
      // "this" is different here! --- but we don't care!
      console.log(abc); // now it is the right object!
      function qwe(){
        // "this" is different here too! --- but we don't care!
        console.log(abc); // it is the right object here too!
      }
      ...
    };
    

    이이 점에서 고유하지 않습니다 : 인수가 같은 방식으로 처리해야하는 다른 의사 변수입니다 - 앨리어싱에 의해.


  2. 2.그래,이 공통의 표준이 될 것으로 보인다. 일부 코더가 자기를 사용, 다른 사람들이 저를 사용합니다. 그것은 이벤트에 반대 "진짜"개체에 대한 참조 백으로 사용됩니다.

    그래,이 공통의 표준이 될 것으로 보인다. 일부 코더가 자기를 사용, 다른 사람들이 저를 사용합니다. 그것은 이벤트에 반대 "진짜"개체에 대한 참조 백으로 사용됩니다.

    나에게 정말 얻을 수있는 동안 조금했다 그것의 무엇인가, 그것은 처음에는 이상한 모양을한다.

    나는 보통 내 객체의 상단에이 권리를 어떻게 (내 데모 코드를 변명 - 그것은 무엇보다 개념의 우수한 코딩 기술에 대한 교훈되지 않습니다)

    function MyObject(){
      var me = this;
    
      //Events
      Click = onClick; //Allows user to override onClick event with their own
    
      //Event Handlers
      onClick = function(args){
        me.MyProperty = args; //Reference me, referencing this refers to onClick
        ...
        //Do other stuff
      }
    }
    

  3. 3.

    var functionX = function() {
      var self = this;
      var functionY = function(y) {
        // If we call "this" in here, we get a reference to functionY,
        // but if we call "self" (defined earlier), we get a reference to function X.
      }
    }
    

    편집 :에도 불구하고, 객체 내에서 중첩 된 기능은 글로벌 윈도우 객체가 아닌 주변 객체를 취한다.


  4. 4.당신이 ES2015을하고 또는 유형 스크립트를하고 ES5 다음 코드에서 함수를 화살표 사용할 수 있으며 해당 오류의 얼굴을하지 않고있는 경우이 인스턴스에서 원하는 범위를 의미합니다.

    당신이 ES2015을하고 또는 유형 스크립트를하고 ES5 다음 코드에서 함수를 화살표 사용할 수 있으며 해당 오류의 얼굴을하지 않고있는 경우이 인스턴스에서 원하는 범위를 의미합니다.

    this.name = 'test'
    myObject.doSomething(data => {
      console.log(this.name)  // this should print out 'test'
    });
    

  5. 5.이 문제를 해결하는 한 가지 방법은 자바 스크립트 바인드 방법으로 개체에 모든 콜백을 결합하는 것입니다.

    이 문제를 해결하는 한 가지 방법은 자바 스크립트 바인드 방법으로 개체에 모든 콜백을 결합하는 것입니다.

    이름이 지정된 방법으로이 작업을 수행 할 수 있습니다,

    function MyNamedMethod() {
      // You can now call methods on "this" here 
    }
    
    doCallBack(MyNamedMethod.bind(this)); 
    

    또는 익명 콜백

    doCallBack(function () {
      // You can now call methods on "this" here
    }.bind(this));
    

    VAR 자체에 의존하는 대신 다음을 수행하면이 프로그램을 사용하면 자바 스크립트에서이 동작합니다의 바인딩 폐쇄 기준에 의존하지 않는 방법을 이해 =.

    또한, ES6에서 굵은 화살표 연산자 기본적 익명 함수 .bind (이) 호출 동일한이다 :

    doCallback( () => {
      // You can reference "this" here now
    });
    

  6. 6.내가 jQuery를 사용하지 않은, 그러나 프로토 타입 같은 라이브러리에서 특정 범위에 기능을 바인딩 할 수 있습니다. 그와 그래서 마음에 당신의 코드는 다음과 같을 것이다 :

    내가 jQuery를 사용하지 않은, 그러나 프로토 타입 같은 라이브러리에서 특정 범위에 기능을 바인딩 할 수 있습니다. 그와 그래서 마음에 당신의 코드는 다음과 같을 것이다 :

     $('#foobar').ready('click', this.doSomething.bind(this));
    

    바인드 방법은 사용자가 지정한 범위 원래 메소드를 호출하는 새로운 기능을 반환합니다.


  7. 7.ES6에서 화살표 기능으로는 그들이이 값을 캡처하기 때문에이 작업을 수행 할 필요가 없습니다 때문 그냥이에 추가.

    ES6에서 화살표 기능으로는 그들이이 값을 캡처하기 때문에이 작업을 수행 할 필요가 없습니다 때문 그냥이에 추가.


  8. 8.나는 실제로 당신이 당신의 해봐요 함수 내에서 어떻게 할 건데에 따라 달라집니다 생각합니다. 이 키워드를 사용하여 액세스 MyObject를 등록하기 위하여려고하는 경우에 당신은 그것을 사용해야합니다. 하지만 다음의 코드는 작업은 객체 (MyObject를) 속성을 사용하여 특별한 일을하지 않는 것입니다 경우라고 생각합니다.

    나는 실제로 당신이 당신의 해봐요 함수 내에서 어떻게 할 건데에 따라 달라집니다 생각합니다. 이 키워드를 사용하여 액세스 MyObject를 등록하기 위하여려고하는 경우에 당신은 그것을 사용해야합니다. 하지만 다음의 코드는 작업은 객체 (MyObject를) 속성을 사용하여 특별한 일을하지 않는 것입니다 경우라고 생각합니다.

    function doSomething(){
      .........
    }
    
    $("#foobar").ready('click', function(){
    
    });
    
  9. from https://stackoverflow.com/questions/337878/var-self-this by cc-by-sa and MIT license