JavaScript의 프로토타입 배열: 인스턴스 간 공유
JavaScript에서 프로토타입을 사용하면 클래스 인스턴스 간에 동작과 데이터를 공유할 수 있습니다. 그러나 배열을 프로토타이핑할 때 고유한 동작이 나타납니다. 즉, 비공개가 아닌 모든 클래스 인스턴스에서 공유됩니다.
프로토타이핑 작동 방식:
객체의 프로토타입 새로운 객체를 생성하기 위한 청사진 역할을 합니다. 프로토타입에 정의된 속성과 메서드는 프로토타입에서 상속받은 모든 개체에서 액세스할 수 있습니다. 이 개념은 인스턴스가 별도의 속성 복사본을 갖는 클래스 기반 언어와 다릅니다.
다음 예에서 Sandwich 클래스는 Sandwich.prototype 객체에서 상속됩니다.
function Sandwich() { // Uncomment to fix the problem //this.ingredients = []; } Sandwich.prototype = { "ingredients" : [], // ... };
여기서는 Ingredients 속성은 프로토타입에 정의되어 있습니다. 이는 모든 인스턴스(예: 치즈버거, blt 등)가 동일한 배열을 공유한다는 것을 의미합니다.
공유 배열:
프로토타입 배열의 문제는 하나를 수정한다는 것입니다. 인스턴스의 배열은 다른 모든 배열에 영향을 미칩니다. 이는 질문에 제공된 예에서 볼 수 있듯이 예기치 않은 동작으로 이어질 수 있습니다. Cheeseburger.ingredients 또는 blt.ingredients가 수정되면 Sandwich.prototype에서 상속된 동일한 공유 배열이 변경됩니다.
공유를 피하는 방법:
비공개를 만들려면 각 인스턴스에 대한 배열은 생성자가 아닌 생성자 내에서 속성을 정의합니다. 프로토타입:
function Sandwich() { this.ingredients = []; }
여기서 Ingredients 속성은 새로 생성된 각 인스턴스에 할당되어 다른 인스턴스와 구별되고 격리됩니다.
공유 데이터와 인스턴스별 데이터:
일반적인 규칙은 생성자 내에 인스턴스별 데이터를 할당하고 생성자 내에 공유 데이터(예: 메서드)를 할당하는 것입니다. 프로토타입. 이를 통해 객체 생성 시 액세스를 제어하고 유연성을 확보할 수 있습니다.
추가 참고 사항:
위 내용은 JavaScript의 프로토타입 배열이 인스턴스 간에 공유되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!