2016-08-16 6 views
0

여러 웹 사이트 튜토리얼을 통해 혼란스러워하고 이제는 아래 두 문장의 차이점을 찾을 수 없습니다. 내가 첫 번째 줄은 직원 참조가 사람 생성자에 지적 보여다시피javascript 설명의 프로토 타입 재사용

Employee.prototype = Object.create(Person.prototype); 
Employee.prototype.constructor = Employee; 

을 (사람이 직원의 수퍼 클래스/함수를 가정). 그리고 Person의 생성자는 Object.create()에 의해 생성되었습니다. 두 번째는 단순히 Employee 생성자로 만 생성됩니다.

내가 자바 프로그래머 인 것처럼 나에게 알려 주면 자바 스크립트가 혼란 스럽다.

+1

첫 번째 줄'Employee.prototype.constructor'가'Person'과 동일합니다. 함수의'prototype.constructor' 속성이 항상 함수 자체를 가리 키기 때문에 이것은 정확하지 않습니다. 그러므로 우리는 그것을 고쳐야합니다. 예를 들어 2 행에서 이루어진 것을 수행해야합니다. 당신이 알고 싶었던 것입니까? 나는 당신이 요구하는 것을 정말로 이해하지 못합니다. –

+0

나는 단순히 두 문장의 의미를보고 있습니다. –

답변

2

javascript의 프로토 타입은 java의 클래스와 같습니다. 그래서 코드 :

Employee.prototype = Object.create(Person.prototype); 
Employee.prototype.constructor = Employee; 

수단 :

class Employee inherits new Person() { // meaning of first line 
    Employee constructor = Employee // meaning of second line 
} 

고전 자바 스크립트에서, 어떤 클래스가없는 대신에있다 생성자. 생성자는 myFunction() 대신 new myFunction()을 통해 호출하는 일반 함수입니다.

그리고 클래스에 속한 생성자 대신, 프로토 타입 (클래스와 비슷한 객체)은 생성자의 속성입니다. 그리고 네, 함수는 다른 객체와 마찬가지로 자바 스크립트의 다른 객체와 마찬가지로 객체이므로 다른 객체와 마찬가지로 속성을 가질 수 있습니다.

또한 자바 스크립트 생성자에서 생성자를 상속받을 수 없습니다 (바보가 아니어야합니다 : D). 대신 생성자는 객체를 상속받습니다 (엄격히 말하면 객체는 생성자를 호출 할 때 상속이 발생하므로 객체에서 상속받습니다). 그래서 슈퍼 클래스 객체의 인스턴스를 만들어서 상속받을 수있게 만듭니다.

기술적으로 말하면, Employee.prototype.constructor 라인은 필요하지 않습니다. 첫 번째 라인은 상속을 설정하는 데 필요한 모든 것입니다.