변수 / 상수 및 기타 함수가있는 개체를 모두 포함하는 프로토 타입이있는 함수가 있습니다. 이러한 함수 중 하나에는 프로토 타입 내부의 변수 / 상수를 설정하는 초기화 함수가 포함되어 있습니다. 이것은 객체의 인스턴스가 하나만 생성 될 때 (내 목적을 위해) 잘 작동합니다. 그러나 여러 인스턴스가 생성되면 순수한 "새"개체가 생성되는 대신 이전 인스턴스가 재정의됩니다.
평소와 같이 이는 아래 코딩 샘플에서 가장 잘 표시 / 설명됩니다.
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에 액세스 할 수 있습니다.
문제는 불변성과 관련이 있습니다. 프로토 타입 내부에 _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] 삭제
몇 마디 만하겠습니다