JavaScript constructor_javascript 스킬에 대한 자세한 설명

WBOY
풀어 주다: 2016-05-16 15:23:11
원래의
1688명이 탐색했습니다.

생성자는 인스턴스 객체를 초기화하는 것이고, 객체의 프로토타입 속성은 인스턴스 객체를 상속하는 것입니다.

생성자 메모:

1. 기본 기능의 첫 글자는 대문자로 표기됩니다

2. 생성자는 아무것도 반환하지 않습니다. new 연산자는 자동으로 지정된 유형을 생성하고 반환합니다. 생성자가 호출되면 new는 자동으로 this 객체를 생성하며 유형은 생성자 유형입니다.

3. 생성자에서 명시적으로 return을 호출할 수도 있습니다. 반환된 값이 객체인 경우 새로 생성된 객체 인스턴스 대신 반환됩니다. 반환된 값이 기본 유형인 경우 무시되고 새로 생성된 인스턴스가 반환됩니다. 

 function Person( name){
        this.name =name;
      }
       var p1=new Person('John');
로그인 후 복사

은 다음과 같습니다:

   function person(name ){
        Object obj =new Object();
        obj.name =name;
         return obj;
      }
       var p1= person("John");
로그인 후 복사

4. 생성자도 함수이기 때문에 직접 호출할 수 있지만 반환값은 정의되지 않습니다. 이때 생성자 내 this 개체는 전역 this 개체와 같습니다. this.name은 실제로 전역 변수 이름을 생성합니다. 엄격 모드에서는 new를 통해 Person 생성자를 호출하면 오류가 발생합니다.

5. 생성자에서 Object.defineProperty() 메서드를 사용하여 초기화할 수도 있습니다.

  function Person( name){
        Object.defineProperty(this, "name"{
          get :function(){
             return name;
          },
           set:function (newName){
            name =newName;
          },
          enumerable :true, //可枚举,默认为false
           configurable:true //可配置
         });
      }  
       var p1=new Person('John');
로그인 후 복사

6. 생성자에서 프로토타입 객체 사용

 //比直接在构造函数中写的效率要高的多
       Person.prototype.sayName= function(){
         console.log(this.name);
      };
로그인 후 복사

그러나 메소드가 많으면 대부분의 사람들은 더 간단한 방법을 채택할 것입니다. 즉, 프로토타입 객체를 다음과 같이 객체 리터럴로 직접 바꾸는 것입니다.

 Person.prototype ={
        sayName :function(){
           console.log(this.name);
        },
        toString :function(){
           return "[Person "+ this.name+"]" ;
        }
      };
로그인 후 복사
이 방법은 Person.prototype을 여러 번 입력할 필요가 없기 때문에 매우 인기가 있지만 주의해야 할 부작용이 있습니다.

리터럴 형식을 사용하여 프로토타입 객체를 다시 작성하면 생성자의 속성이 변경되므로 Person 대신 Object를 가리킵니다. 이는 프로토타입 객체에 다른 객체 인스턴스에는 없는 생성자 속성이 있기 때문입니다. 함수가 생성되면 해당 프로토타입 속성도 생성되고 프로토타입 객체의 생성자 속성은 함수를 가리킵니다. 객체 리터럴 형식을 사용하여 프로토타입 객체를 다시 작성하면 해당 생성자 속성이 일반 객체 Object로 설정됩니다. 이를 방지하려면 다음과 같이 프로토타입 객체를 다시 작성할 때 생성자를 수동으로 재설정해야 합니다.


 Person.prototype ={
        constructor :Person,
        
        sayName :function(){
           console.log(this.name);
        },        
        toString :function(){
           return "[Person "+ this.name+"]" ;
        }
      };
로그인 후 복사
다시 테스트:

p1.constructor===사람


그렇습니다


p1.constructor===객체


거짓


Person의 p1 인스턴스


그렇습니다

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿