JavaScript에서 객체 속성은 객체에 직접 정의하거나 객체의 속성으로 정의할 수 있습니다. 객체의 프로토타입. 이 동작은 배열을 다룰 때 중요한 의미를 갖습니다.
기본적으로 프로토타입 배열은 클래스의 모든 인스턴스에서 공유되므로 예기치 않은 동작이 발생합니다. 예를 들어, 클래스의 프로토타입에 빈 배열이 포함되어 있으면 모든 인스턴스가 동일한 배열을 참조합니다. 이는 다음 예에서 확인할 수 있습니다.
function Sandwich() { // Uncomment to fix the problem //this.ingredients = []; } Sandwich.prototype = { "ingredients": [], "addIngredients": function(ingArray) { for(var key in ingArray) { this.addIngredient(ingArray[key]); } }, "addIngredient": function(thing) { this.ingredients.push(thing); } }; var cheeseburger = new Sandwich(); cheeseburger.addIngredients(["burger", "cheese"]); var blt = new Sandwich(); blt.addIngredients(["bacon", "lettuce", "tomato"]); print_r("Cheeseburger contains:", cheeseburger.ingredients);
이 예에서 Cheeseburger와 blt는 서로 다른 인스턴스임에도 불구하고 동일한 재료 배열을 공유합니다. 치즈버거에 재료를 추가하면 blt에도 영향을 미쳐 배열의 공유 특성이 강조됩니다.
이 동작을 수정하려면 프로토타입 속성이 아닌 개체 자체에 직접 배열을 정의하는 것이 좋습니다. 이렇게 하면 각 인스턴스가 고유한 전용 배열을 갖게 됩니다. 다음과 같이 코드를 수정하면 문제가 해결됩니다.
function Sandwich() { this.ingredients = []; }
생성자에서 배열을 정의하면 Sandwich의 각 인스턴스가 고유한 배열 복사본을 가지게 되어 공유 동작이 제거됩니다.
요약하자면, 프로토타입 배열은 JavaScript에서 클래스의 모든 인스턴스 간에 공유됩니다. 각 인스턴스에 대한 전용 배열을 만들려면 생성자에서 개체 자체에 직접 배열을 정의해야 합니다. 이러한 구별은 JavaScript의 객체 동작을 이해하고 관리하는 데 매우 중요합니다.
위 내용은 JavaScript 객체 멤버는 배열 공유 또는 비공개로 프로토타입화됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!