JavaScript 개체의 상태 저장

ThrowsException

나중에 내 응용 프로그램에서 'this'를 이전 상태로 되돌릴 수 있도록 javscript 개체에 'this'의 통계를 저장하려고합니다. 클로저를 사용하여 달성 할 수 있다고 생각했지만 지금까지 성공하지 못했습니다. 내 생각은 이런 식으로

function SavedFeature() {
    var self = this;

    this.savedItem;

    this.storeState = function() {
        this.savedItem = storeClosure();
    }

    function storeClosure() {
        var closure = self;
        return function() {
            return closure;
        };
    };

    //other things the user can change...
}

그래서 나중에 내 응용 프로그램에서 storeState를 호출 한 시점으로 돌아 가야하는 경우

//return the object I put in my closure
var backToNormal = savedFeature.savedItem();

storeState ()를 호출 한 후 savedFeature 객체에 대한 변경 사항이 savedItem () 호출에서 검색하는 항목에 반영되기 때문에 작동하지 않습니다. 클로저가 새 인스턴스에 복사되는 대신 self 참조로 설정되기 때문에 이것이 발생한다고 생각합니다.

어쨌든 내 전체 객체의 상태를 이와 같은 클로저에 저장하거나 다른 방법으로 저장해야합니까?

꼭두각시

당신이 겪고있는 문제는 js 객체가 참조로 전달된다는 것입니다. 즉, 개체에서 수행 된 모든 변경 사항이 obj.savedItem속성에 적용됩니다 .

수정 : 딥 클론 저장 obj.savedItem

 this.storeState = function() {
     this.savedItem = _.cloneDeep(this); // or _.clone(this, true);
 }

cloneDeeplodash 메소드이며, 대부분의 js libjQuery의 $ .extend 등과 같이 자체적 으로 제공합니다.

자신의 딥 클론 기능을 쉽게 롤링하고이 스레드 에서 옵션을 찾을 수 있습니다 .

jQuery를 사용한 완전한 예 :

function SavedFeature() {
    this.savedItem;

    this.clone = function() {
       return $.extend(true, {}, this);
    },

    this.storeState = function() {
        this.savedItem = this.clone();
    }
}

이렇게하면 clone사용 된 라이브러리 메서드를 facading하므로 메서드를 변경하여 다른 환경에 적응할 수 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

10 초마다 수천 개의 개체 상태 저장

분류에서Dev

asyncStorage에 배열 상태 객체 저장

분류에서Dev

call-with-current-continuation-상태 저장 개념

분류에서Dev

Apache Flink의 상태 저장 함수

분류에서Dev

반응의 localstorage에 상태 저장

분류에서Dev

탭의 마지막 상태 저장

분류에서Dev

추가 된 위젯의 상태 저장

분류에서Dev

여러 CheckBox의 Android 저장 상태

분류에서Dev

상태 저장 최대 절전 모드 개체 봄 @Retryable

분류에서Dev

상태 저장 위젯의 현재 상태 (Flutter)

분류에서Dev

상태 비 저장 구성 요소의 상태 대안

분류에서Dev

Flutter의 상태 비 저장 위젯에 매개 변수 전달

분류에서Dev

자식 상태 비 저장 위젯에서 상태 저장 위젯의 상태를 설정하는 방법

분류에서Dev

확인란의 동적 상태를 저장하는 데 문제가 있음 (Javascript, jQuery)

분류에서Dev

저장된 javascript facebook API 응답이 정의되지 않은 상태로 유지됩니까?

분류에서Dev

UIButton 상태 저장

분류에서Dev

여러 장소의 개체 상태 / 반복 코드 (DRY)

분류에서Dev

패널 / 대화 상자에 체크 박스 상태 저장

분류에서Dev

단일 개체 / 상태에서 두 구성 요소의 데이터를 어떻게 저장합니까?

분류에서Dev

게임에서 장면의 상태를 저장하는 Javafx

분류에서Dev

C #에서 개체의 명목상 저장소 할당

분류에서Dev

JavaScript에서 브라우저의 온라인 상태 감지

분류에서Dev

상태 저장 위젯의 initState를 공급자 모드로 바꾸고 상태 비 저장을 상태 저장으로 바꾸는 방법

분류에서Dev

Gson 대 JAXB로 Java 객체 저장 (객체 상태)

분류에서Dev

항상 마지막 개체 저장

분류에서Dev

상태 저장 및 상태 비 저장 람다 표현의 차이는 무엇인가?

분류에서Dev

Flink의 상태 저장 스트림 연산자 함수에서 상태 저장 도우미 클래스 사용

분류에서Dev

React 상태에 자동 업데이트 객체 저장

분류에서Dev

전체 조각 저장 및 상태보기

Related 관련 기사

  1. 1

    10 초마다 수천 개의 개체 상태 저장

  2. 2

    asyncStorage에 배열 상태 객체 저장

  3. 3

    call-with-current-continuation-상태 저장 개념

  4. 4

    Apache Flink의 상태 저장 함수

  5. 5

    반응의 localstorage에 상태 저장

  6. 6

    탭의 마지막 상태 저장

  7. 7

    추가 된 위젯의 상태 저장

  8. 8

    여러 CheckBox의 Android 저장 상태

  9. 9

    상태 저장 최대 절전 모드 개체 봄 @Retryable

  10. 10

    상태 저장 위젯의 현재 상태 (Flutter)

  11. 11

    상태 비 저장 구성 요소의 상태 대안

  12. 12

    Flutter의 상태 비 저장 위젯에 매개 변수 전달

  13. 13

    자식 상태 비 저장 위젯에서 상태 저장 위젯의 상태를 설정하는 방법

  14. 14

    확인란의 동적 상태를 저장하는 데 문제가 있음 (Javascript, jQuery)

  15. 15

    저장된 javascript facebook API 응답이 정의되지 않은 상태로 유지됩니까?

  16. 16

    UIButton 상태 저장

  17. 17

    여러 장소의 개체 상태 / 반복 코드 (DRY)

  18. 18

    패널 / 대화 상자에 체크 박스 상태 저장

  19. 19

    단일 개체 / 상태에서 두 구성 요소의 데이터를 어떻게 저장합니까?

  20. 20

    게임에서 장면의 상태를 저장하는 Javafx

  21. 21

    C #에서 개체의 명목상 저장소 할당

  22. 22

    JavaScript에서 브라우저의 온라인 상태 감지

  23. 23

    상태 저장 위젯의 initState를 공급자 모드로 바꾸고 상태 비 저장을 상태 저장으로 바꾸는 방법

  24. 24

    Gson 대 JAXB로 Java 객체 저장 (객체 상태)

  25. 25

    항상 마지막 개체 저장

  26. 26

    상태 저장 및 상태 비 저장 람다 표현의 차이는 무엇인가?

  27. 27

    Flink의 상태 저장 스트림 연산자 함수에서 상태 저장 도우미 클래스 사용

  28. 28

    React 상태에 자동 업데이트 객체 저장

  29. 29

    전체 조각 저장 및 상태보기

뜨겁다태그

보관