JavaScript에서 이전 개체를 덮어 쓰지 않고 새 개체 인스턴스 만들기

IckyIckyInsects

변수 / 상수 및 기타 함수가있는 개체를 모두 포함하는 프로토 타입이있는 함수가 있습니다. 이러한 함수 중 하나에는 프로토 타입 내부의 변수 / 상수를 설정하는 초기화 함수가 포함되어 있습니다. 이것은 객체의 인스턴스가 하나만 생성 될 때 (내 목적을 위해) 잘 작동합니다. 그러나 여러 인스턴스가 생성되면 순수한 "새"개체가 생성되는 대신 이전 인스턴스가 재정의됩니다.

평소와 같이 이는 아래 코딩 샘플에서 가장 잘 표시 / 설명됩니다.

var objectTest = function () {};

objectTest.prototype = {
   _params: {
      a: ""
   },
   init: function (a){
       var self = this;
       self._params.a = a;
   }
};

var object1 = new objectTest();
object1.init("foo");
var object2 = new objectTest();
object2.init("bar")

$("#Testing").html(object1._params.a);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="Testing">Initial</div>

object1._params.a가 "foo"가 될 것으로 예상하지만 대신 "bar"입니다. object1._params.a가 "foo"이고 object2._params.a가 "bar"가되도록이 코드를 구성 / 수정하려면 어떻게해야합니까? 나는 또한 대답이 그것을 사용하는 어딘가에 있으면 JQuery에 액세스 할 수 있습니다.

Shimmy568

문제는 불변성과 관련이 있습니다. 프로토 타입 내부에 _params 객체를 만들었으므로 프로토 타입이 인스턴스간에 공유되기 때문에 모든 인스턴스에서 공유됩니다. 이를 방지하는 방법은 프로토 타입에서만 함수를 만들고 생성자에서 필드를 초기화하는 것입니다.

var objectTest = function () {
    this._params = {
        a: ""
    };
};

objectTest.prototype = {
   init: function (a){
       var self = this;
       self._params.a = a;
   }
};

var object1 = new objectTest();
object1.init("foo");
var object2 = new objectTest();
object2.init("bar")

$("#Testing").html(object1._params.a);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="Testing">Initial</div>

또한 수동으로 프로토 타입을 엉망으로 만드는 대신 클래스시도하고 사용 하십시오.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

분류에서Dev

기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

분류에서Dev

개체의 이전 인스턴스를 제거하고 루프에서 새 인스턴스를 만듭니다.

분류에서Dev

새 개체를 이전 개체로 덮어 쓰고 있습니다.

분류에서Dev

dll을 만들 때마다 새 버전의 인터페이스 / com 개체를 만들지 않도록 vb6에 어떻게 지시합니까?

분류에서Dev

Python : 새 개체를 만들기 전에 개체가 이미 존재하는지 확인

분류에서Dev

매개 변수를 전달하지 않고 새 개체 만들기

분류에서Dev

새 개체 만들기와 기존 개체 덮어 쓰기 (성능)

분류에서Dev

구성 옵션을 덮어 쓰지 않고 자바 스크립트 개체의 여러 인스턴스

분류에서Dev

덮어 쓰지 않고 개체의 속성 채우기

분류에서Dev

새로 만들기를 사용하거나 사용하지 않고 C #에서 개체 만들기

분류에서Dev

새 개체와 기존 개체 덮어 쓰기

분류에서Dev

C # 클래스 개체 덮어 쓰기

분류에서Dev

새 변수를 만들지 않고 다른 파일에있는 클래스의 인스턴스 만들기

분류에서Dev

덮어 쓰지 않고 객체 DOM 트위터 부 스트랩 모달 만들기

분류에서Dev

IEnumerable 개체를 전달하는보기에서 새 개체 만들기

분류에서Dev

새 파생 개체를 기본 클래스 포인터에 할당하려고하지만 아무 일도 일어나지 않은 것처럼 보입니다.

분류에서Dev

새 개체를 만들 때 값이 전달되지 않은 경우 기본 매개 변수를 어떻게 사용할 수 있습니까?

분류에서Dev

WinForms 끌어서 놓기 (개체가 인스턴스로 설정되지 않음)

분류에서Dev

어떻게 새로운 객체를하지 않고 개인 구성원 개체를 테스트

분류에서Dev

하나의 라이너에서 여러 개의 새 인스턴스 만들기

분류에서Dev

루프의 새 개체가 Java에서 덮어 쓰기됩니다.

분류에서Dev

Btrace 안전하지 않은 모드에서 새 개체를 만들 수없는 이유는 무엇입니까?

분류에서Dev

스트림 내부에 새 개체를 만들고 setter 사용

분류에서Dev

목록에 새 개체를 추가하면 이미 저장된 개체를 새 개체로 덮어 씁니다.

분류에서Dev

새 개체를 만들지 않고 Javascript 함수를 연결하는 방법이 있습니까?

분류에서Dev

Java에서 새 인스턴스를 만들지 않고 GUI를 어떻게 참조합니까?

분류에서Dev

인터넷 연결에 액세스하지 않고 EmailMessage 개체 만들기

분류에서Dev

사전 덮어 쓰기 / 지우기 개체

Related 관련 기사

  1. 1

    기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

  2. 2

    기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

  3. 3

    개체의 이전 인스턴스를 제거하고 루프에서 새 인스턴스를 만듭니다.

  4. 4

    새 개체를 이전 개체로 덮어 쓰고 있습니다.

  5. 5

    dll을 만들 때마다 새 버전의 인터페이스 / com 개체를 만들지 않도록 vb6에 어떻게 지시합니까?

  6. 6

    Python : 새 개체를 만들기 전에 개체가 이미 존재하는지 확인

  7. 7

    매개 변수를 전달하지 않고 새 개체 만들기

  8. 8

    새 개체 만들기와 기존 개체 덮어 쓰기 (성능)

  9. 9

    구성 옵션을 덮어 쓰지 않고 자바 스크립트 개체의 여러 인스턴스

  10. 10

    덮어 쓰지 않고 개체의 속성 채우기

  11. 11

    새로 만들기를 사용하거나 사용하지 않고 C #에서 개체 만들기

  12. 12

    새 개체와 기존 개체 덮어 쓰기

  13. 13

    C # 클래스 개체 덮어 쓰기

  14. 14

    새 변수를 만들지 않고 다른 파일에있는 클래스의 인스턴스 만들기

  15. 15

    덮어 쓰지 않고 객체 DOM 트위터 부 스트랩 모달 만들기

  16. 16

    IEnumerable 개체를 전달하는보기에서 새 개체 만들기

  17. 17

    새 파생 개체를 기본 클래스 포인터에 할당하려고하지만 아무 일도 일어나지 않은 것처럼 보입니다.

  18. 18

    새 개체를 만들 때 값이 전달되지 않은 경우 기본 매개 변수를 어떻게 사용할 수 있습니까?

  19. 19

    WinForms 끌어서 놓기 (개체가 인스턴스로 설정되지 않음)

  20. 20

    어떻게 새로운 객체를하지 않고 개인 구성원 개체를 테스트

  21. 21

    하나의 라이너에서 여러 개의 새 인스턴스 만들기

  22. 22

    루프의 새 개체가 Java에서 덮어 쓰기됩니다.

  23. 23

    Btrace 안전하지 않은 모드에서 새 개체를 만들 수없는 이유는 무엇입니까?

  24. 24

    스트림 내부에 새 개체를 만들고 setter 사용

  25. 25

    목록에 새 개체를 추가하면 이미 저장된 개체를 새 개체로 덮어 씁니다.

  26. 26

    새 개체를 만들지 않고 Javascript 함수를 연결하는 방법이 있습니까?

  27. 27

    Java에서 새 인스턴스를 만들지 않고 GUI를 어떻게 참조합니까?

  28. 28

    인터넷 연결에 액세스하지 않고 EmailMessage 개체 만들기

  29. 29

    사전 덮어 쓰기 / 지우기 개체

뜨겁다태그

보관