>  기사  >  웹 프론트엔드  >  자바스크립트 객체의 정의 방법은 무엇입니까?

자바스크립트 객체의 정의 방법은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2021-03-31 17:41:422821검색

JavaScript 객체 정의 방법: 1. 생성자 메서드 3. 프로토타입 메서드 4. 동적 프로토타입 메서드 6. 혼합 팩토리 메서드

자바스크립트 객체의 정의 방법은 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, DELL G3 컴퓨터.

Javascript 객체 정의 방법:

1. 팩토리 메소드

  function Car(){
   var ocar = new Object;
   ocar.color = "blue";
   ocar.doors = 4;
   ocar.showColor = function(){
    document.write(this.color)
   };
   return ocar;
  }
  var car1 = Car();
  var car2 = Car();

이 함수가 호출되면 새로운 객체가 생성되고 모든 속성과 메소드가 부여됩니다. 이 기능을 사용하여 정확히 동일한 속성을 가진 2개의 개체를 만듭니다. 물론 내 여동생이 매개변수를 전달하여 이 메서드를 수정할 수 있습니다.

  function Car(color,door){
   var ocar = new Object;
   ocar.color = color;
   ocar.doors = door;
   ocar.showColor = function(){
    document.write(this.color)
   };
   return ocar;
  }
  var car1 = Car("red",4);
  var car2 = Car("blue",4);
  car1.showColor()  //output:"red"
  car2.showColor()  //output:"blue"

이제 함수에 다양한 매개변수를 전달하여 다양한 값을 가진 객체를 얻을 수 있습니다.

이전 예에서 showcolor()는 Car() 함수가 호출될 때마다 생성됩니다. 즉, 각 개체에는 고유한 showcolor() 메서드가 있습니다.

하지만 사실 각 개체는 동일한 기능을 공유합니다.

함수 외부에서 메서드를 정의한 다음 함수의 속성을 메서드에 지정하는 것도 가능합니다.

  function showColor(){
   alert(this.color);
  }
  function Car(){
   var ocar = new Object();
   ocar.color = color;
   ocar.doors = door;
   ocar.showColor = showColor;
   return ocar;
  }

그런데 이건 함수 메소드처럼 보이지 않네요.

2. 생성자 메서드

생성자 메서드는 아래와 같이 팩토리 메서드만큼 간단합니다.

  function Car(color,door){
   this.color = color;
   this.doors = door;
   this.showColor = function(){
    alert(this.color)
   };
  }
  var car1 = new Car("red",4);
  var car2 = new Car("blue",4);

생성자 메서드는 함수 내부에 객체를 생성하지 않고 this 키워드를 사용하는 것을 볼 수 있습니다. 생성자가 호출될 때 객체가 생성되고, 이 객체만 함수 내부의 객체 속성에 액세스하는 데 사용할 수 있기 때문입니다.

이제 new를 사용하여 개체를 만들면 이렇게 보입니다! 그러나 이는 공장 접근 방식과 동일합니다. 각 호출은 객체에 대한 자체 메서드를 생성합니다.

3. 프로토타입 방법

이 방법은 객체의 프로토타입 속성을 사용합니다. 먼저 빈 함수를 사용하여 클래스 이름을 만든 다음 모든 속성과 메서드에 프로토타입 속성이 할당됩니다.

  function Car(){
  }
  Car.prototype.color = "red";
  Car.prototype.doors = 4;
  Car.prototype.showColor = function(){
   alert(this.color);
  }
  var car1 = new Car();
  var car2 = new Car();

이 코드에서는 먼저 빈 함수를 정의한 다음 프로토타입 속성을 통해 객체의 속성을 정의합니다. 이 함수가 호출되면 프로토타입의 모든 속성이 생성될 객체에 즉시 할당됩니다. 이 함수의 모든 객체는 showColor()에 대한 포인터를 저장하며 구문상 모두 동일한 객체에 속하는 것으로 나타납니다.

하지만 이 함수에는 매개변수가 없으며, 매개변수를 전달하여 속성을 초기화할 수 없습니다. 속성의 기본값은 개체가 생성된 후에 변경되어야 합니다.

프로토타입 메서드의 매우 심각한 문제는 속성이 배열과 같은 객체를 가리키는 경우입니다.

  function Car(){
  }
  Car.prototype.color = "red";
  Car.prototype.doors = 4;
  Car.prototype.arr = new Array("a","b");
  Car.prototype.showColor = function(){
   alert(this.color);
  }
  var car1 = new Car();
  var car2 = new Car();
  car1.arr.push("cc");
  alert(car1.arr);  //output:aa,bb,cc
  alert(car2.arr);  //output:aa,bb,cc

배열의 참조 값으로 인해 Car의 두 객체는 ​​동일한 배열을 가리키므로 car1에 값을 추가하면 car2에서도 볼 수 있습니다.

4. 혼합 생성자/프로토타입 방법

Union은 다른 프로그래밍 언어와 마찬가지로 생성자/프로토타입 방법을 사용하여 객체의 비함수 속성을 정의하고 프로토타입 방법을 사용하여 객체를 정의합니다. . 방법.

  function Car(color,door){
   this.color = color;
   this.doors = door;
   this.arr = new Array("aa","bb");
  }
  Car.prototype.showColor(){
   alert(this.color);
  }
  var car1 = new Car("red",4);
  var car2 = new Car("blue",4);
  car1.arr.push("cc");
  alert(car1.arr);  //output:aa,bb,cc
  alert(car2.arr);  //output:aa,bb

5. 동적 프로토타입 방법

동적 프로토타입 방법의 원리는 혼합 생성자/프로토타입 방법과 유사합니다. 유일한 차이점은 객체 메서드가 할당되는 위치입니다.

  function Car(color,door){
   this.color = color;
   this.doors = door;
   this.arr = new Array("aa","bb");
   if(typeof Car._initialized == "undefined"){
    Car.prototype.showColor = function(){
     alert(this.color);
    };
    Car._initialized = true;
   }
  }

동적 프로토타입 메서드는 플래그를 사용하여 메서드가 프로토타입에 할당되었는지 여부를 확인합니다. 이렇게 하면 메서드가 한 번만 생성됩니다

6. 혼합 팩토리 메서드

이 메서드의 목적은 가짜 생성자를 만들고 다른 객체의 새 인스턴스만 반환하는 것입니다.

  function Car(){
   var ocar = new Object();
   ocar.color = "red";
   ocar.doors = 4;
   ocar.showColor = function(){
    alert(this.color)
   };
   return ocar;
  }

팩토리 메소드와의 차이점은 이 메소드는 new 연산자를 사용한다는 것입니다.

위의 내용은 모두 객체를 생성하는 방법입니다. 현재 가장 널리 사용되는 방법은 생성자/프로토타입 혼합 방법이며, 동적 프로토타입 방법도 매우 널리 사용됩니다. 기능적으로 생성자/프로토타입 접근 방식과 동일합니다.

관련 무료 학습 권장사항: javascript 비디오 튜토리얼

위 내용은 자바스크립트 객체의 정의 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.