2014-07-10 3 views
1

, 나는 사람의 생성자가 Employee 생성자에서 생성 된 모든 객체에 대해 증가 된 id 값입니다. 예를 들어,자바 스크립트 상속 예 예를 들어

var employee1 = new Employee('foo'); 
employee1.getName() // will output foo 
employee1.getId() // will output 1 
var employee2 = new Employee('qoo'); 
employee2.getName() // will output qoo 
employee2.getId() // will output 2 

문제는 내가 한 번만 호출되는 다음 각 개체가 고정 된 자동 증가 값을 얻을 것이다 Employee 생성자에 id 변수를 만드는 방법에 대해 조금 혼란 스러워요입니다. Employee 생성자와 상속을 어떻게 설정해야합니까?

답변

1

Person 생성자가 주어지면 프로토 타입 상속을 사용하지 않고 기생적인 상속을 사용하지 않으려합니다.

Employee 생성자 대신 있었던 파라미터의 정적 카운터 증가하여 id가 초기화됩니다 것만 지역 기능을 로컬 변수를 생성하고 정의하는 점에서 매우 유사합니다

Employee.counter = 0; 
function Employee(name) { 
    var that = Person(name); 
    var id = Employee.counter++; 
    that.getId = function() { return id; }; 
    return that; 
} 
+0

이유를 당신을 나는 prototypal 상속을 사용하고 싶지 않다고 생각하지만, 기생적인 것이 있기 때문에 ?? – chaonextdoor

+0

'Person' 함수에서 생성자로 사용하는 대신 객체 리터럴을 반환하기 때문에; '.prototype'을 전혀 사용하지 않습니다 (이 예제에서 당신이 인정할 수는 없지만). – Bergi

+1

이상한'defineProperties'를 제외하고, prototypal을 사용하면 [this code] (https://stackoverflow.com/questions/15045080/javascript-inheritance-calling-object-create-when-setting-a-prototype)처럼 보일 것입니다. 계승. 'this'에'getId' /'getName' /'setName' 메소드를 정의하고'Person'을 다르게 호출 할 것입니다. 그러나'id'가 어떻게 생성되는지는 동일하게 유지됩니다. – Bergi