2014-08-28 2 views
0

개체 생성자를 사용하여 개체를 만드는 과정을 이해하려고합니다.개체 생성자 란 무엇입니까?

온라인으로 소스 인 MDN과 MSDN을 읽은 후 객체 생성자를 정의하는 최선의 방법을 결정할 수 없습니다.

  • 전체 기능과 함께가는 모든 코드 : 위의 코드에서
    function Person(first, last, age, eyecolor) { 
        this.firstName = first; 
        this.lastName = last; 
        this.age = age; 
        this.eyeColor = eyecolor 
    } 
    

    , 나는 같은 개체 생성자 생각해야 하는가?
  • 그냥 함수 "person()"
  • 또는 JavaScript 엔진이 메모리에 내 객체를 "생성"하기 위해해야 ​​할 일이 무엇이든지간에 단순히 주어진 용어입니까?

오브젝트 생성자를 사용하여 오브젝트를 작성하는 것은 오브젝트 템플리트를 작성하는 것과 같습니다.이 템플리트 템플리트는 이전에 정의 된 "오브젝트 템플리트"를 기반으로 해당 오브젝트를 동시에 작성하면서 나중에 채울 수 있습니다.

언제든지이 용어를 정확하게 정의하고 완전히 이해할 수 있도록 도와주세요.

+0

이것은 'new' 인스턴스를 생성 할 때 Object가되는 Constructor 함수입니다. – PHPglue

+2

관습에 따라 생성자 이름은 'Person'과 같이 대문자로 표기됩니다. 그것은 당신이 그것을 부를 때 반드시'new'를 사용해야한다는 것을 기억하는 방법입니다. – Oriol

+0

다음과 같이 Object 리터럴의'new' 인스턴스를 생성 할 수도 있습니다 :'if (! Object.create) {Object.create = function (o) {function F() {}; 에프.프로토 타입 = o; 새로운 F를 반환;}};'. 이제'var pers = {prop : 'value'}, newPers = Object.create (pers);'를 사용하십시오. 물론 객체에 인수를 전달할 수는 없습니다. – PHPglue

답변

1

당신의 person 기능에 constructor function 또는 object constructor 모든 코드를 의미 용어 및 이 코드가과 함께 사용될 것으로 기대 0 연산자이므로 this이 가리키는 새 객체가 주어집니다. 그것은 특정 방식으로 사용하도록 설계된 자바 스크립트의 함수입니다.

Javascript의 생성자 함수는 단지 생성자로 작동하고 new 연산자로 호출되도록 설계된 일상적인 일상 함수라는 것을 이해해야합니다. new 연산자를 사용하여 호출하도록 설계되었으므로 this이 가리키는 브랜드 스 팽킹 새 객체가 있다고 가정합니다.

생성자 함수 내의 코드는 개체를 제대로 초기화하는 데 필요한 작업 만 수행하면됩니다. 아무것도 아니더라도 페이지와 코드 페이지에 이르기까지 - 이는 애플리케이션에 전적으로 의존합니다.

생성자 함수의 다른 강력한 기능은 프로토 타입을 할당 할 수 있다는 것입니다. 그렇게하면 JS 엔진이 전달할 초기 개체를 만들 때 개체에 필요한 기본 속성을 JS 엔진에 알려줍니다 off를 생성자 함수에 전달합니다.

따라서, 귀하의 예제에서 :

function Person(first, last, age, eyecolor) { 
    this.firstName = first; 
    this.lastName = last; 
    this.age = age; 
    this.eyeColor = eyecolor 
} 

당신은 프로토 타입에 몇 가지 방법을 추가 할 수 있습니다

Person.prototype = { 
    getFullName: function() { 
     return this.firstName + " " + this.lastName; 
    }, 
    incrementAge: function() { 
     ++this.age; 
    } 
}; 

을 이제, 새로운 Person 객체를 만들 때 (내가으로 대문자로 전환했습니다 Javascript에서 생성자 함수를 사용하는 일반적인 규칙), 코드에서 생성자로 할당 한 두 속성을 모두 가진 객체를 얻을 수 있지만 프로토 타입에 할당 된 메서드도 갖게됩니다.

var p = new Person("Ted", "Williams", 39, "blue"); 
var fullname = p.getFullName(); // returns "Ted Williams" 

이 방법의 프로토 타입을 사용하는 것이 아니라 생성자에 의해 각 방법의 하나를 할당 일반적으로 자바 스크립트에서보다 효율적이고 프로토 타입은 일이 너무 상속하는 수단을 제공합니다.

+0

좋은 정보 @ jfriend00을 가져 주셔서 감사합니다. 따라서 어떤 함수가'new' 키워드에 의해 호출되는 경우 객체 생성자가 될 수 있다고 말하는 것입니까? 또한,'new' 키워드가 "진짜"객체 생성자라고 생각하는 것이 옳은가요? 아니면 최소한 new 키워드가 객체 생성자의 전제 조건입니까? –

+0

@JonathonAndrews - 함수에서 생성 된 새 객체를 반환하는 정규 함수를 사용하여 new 연산자를 사용하지 않고 새 객체를 만들 수도 있습니다. 이것은 종종 팩토리 함수라고도하지만 생성자 함수와 동일한 것을 수행합니다. – jfriend00

0

'공식적인'정의가 무엇인지 모르겠지만 모든 포인트가 적용됩니다. Object Constructor는 기본적으로 객체를 '구성하는'기능입니다. 이는 생성자 함수 내부의 코드를 통해 수행됩니다. 생성자 함수는 다른 코드 (즉 : 함수 호출을 통해)를 사용하여 객체를 생성 할 수 있습니다. 기술적으로, 객체 컨스트럭터는 단지 '기능'이다. person. 그러나 실제로는 함수가 코드를 내부에서 작동해야하므로 무시할 수는 없습니다.

또한 대문자로 Object 생성자의 이름을 지정하는 js의 명명 지정입니다.

function Person(first, last, age, eyecolor) { 
    this.firstName = first; 
    this.lastName = last; 
    this.age = age; 
    this.eyeColor = eyecolor; 
} 

var jim = new Person("Jimmy", "Smith", 22, "blue"); 

당신이 더 많은 것을 알고 싶은 경우에이 읽는 가치가있다 :

0

"생성자"는 기능이 작동하는 역할을 나타냅니다. 모든 생성자는 단순히 함수이며 어떤 함수도 new으로 호출하여 생성자로 사용할 수 있습니다. 생성자는 new에 의해 호출되도록 의도적으로 작성된 함수입니다.

함수가 생성자 (즉, new이라고 함)로 사용될 때 호출 된 함수의 값은 새로 작성된 객체로 설정된 this입니다. 새로 만든 this 객체는 프로토 타입 체인이 호출 된 함수의 prototype 값으로 시작하는 객체입니다 (따라서, 새로 작성한 this의 경우 this.__proto__ === person.prototype). 즉, person.prototype의 모든 속성이나 메서드는 새로 만든 개체에서 직접 액세스 할 수 있습니다.

마지막으로 생성자 함수가 명시 적으로 객체를 반환하지 않으면 새로 생성 된 this 객체를 반환합니다.

1

간단히 말해서 constructor은 주어진 클래스의 객체를 만드는 함수입니다. 예를 들어 Person 클래스가있는 경우 다음 코드는 해당 클래스의 매개 변수화 된 생성자를 나타낼 수 있습니다.

function Person(first, last, age, eyecolor) { 
     this.firstName = first; 
     this.lastName = last; 
     this.age = age; 
     this.eyeColor = eyecolor 
    } 

여기에는 Person이라는 클래스의 매개 변수화 된 생성자가 있습니다. 매개 변수 (이 경우에는 first, last, age 및 eyecolor라는 4 개의 매개 변수)를 전달하기 때문에 생성자는 "매개 변수화 된"생성자로 알려져 있습니다. 생성자는이 4 개의 값을 취해 질문에 빌드 된 객체의 firstName, lastName, age 및 eyeColor 필드를 설정합니다.

기본 생성자는 프로그램에서 개체를 만들 때 항상 호출됩니다. 이 매개 변수화 된 생성자를 사용하면 기본 생성자로 기본값을 설정하는 대신 생성시에 기본값을 사용하여 객체를 작성할 수 있습니다.

관련 문제