저는 Douglas Crockford의 "Javascript : The Good Parts"서적을 사용하여 처음으로 JavaScript를 배우는 숙련 된 코더입니다. 그것에서는, 그는이 기능을 사용하여 상속하는 '순수 프로토 타입'접근 방식을 사용하는 것이 좋습니다 :JavaScript에서 순수 프로토 타이핑 접근법을 사용할 때 객체 속성을 처리하는 방법
if (typeof Object.create !== 'function') {
Object.create = function(o) {
var F = function() {};
F.prototype = o;
return new F();
};
}
난 데 문제는 그 객체가 생성, 간단한 형식이 아닌 객체가 아니라의 속성을 가질 때 새 객체는 새 객체를 만드는 것이 아니라 객체의 부모 인스턴스를 상속받습니다. 예를 들어 :
Person Jeff has 2 arms and 2 legs.
Cat Bob has 0 arms and 0 legs.
Now person Jeff has 0 arms and 0 legs.
내가 아니라 '몸'에 대한, 단순한 '이름'속성에 대한 예상되는 동작을 얻을 :
var aBody = {
arms : 2,
legs : 2
};
var person = {
name : 'Jeff',
body : Object.create(aBody)
};
document.writeln('Person '+person.name+' has '+person.body.arms+' arms and '+person.body.legs+' legs.');
var cat = Object.create(person);
cat.name = 'Bob';
cat.body.arms = 0;
cat.body.legs = 0;
document.writeln('Cat '+cat.name+' has '+cat.body.arms+' arms and '+cat.body.legs+' legs.');
document.writeln('Now person '+person.name+' has '+person.body.arms+' arms and '+person.body.legs+' legs.');
이 출력이 있습니다. 제 생각에는 JavaScript가 참조로 복사 되었기 때문에 새로운 aBody 인스턴스가 생성되지 않기 때문입니다. 예를 들어 person
에서 개체를 만들 때마다 수동으로이 작업을 수행 할 수 있습니다. cat.body = Object.create(aBody)
하지만 원래 개체 정의 (여기, person
)로 롤백하는 깔끔한 방법을 찾을 수 없었습니다.
좋은, 명확하고 신뢰할 수있는 JS 코드를 작성하는 법을 배우려는 데 제가 제공 할 수있는 지침을 정말 고맙게 생각합니다. '순수하게 프로토 타이핑 (prototypal)'접근법을 사용하는 사람들이이 문제를 다루는 영리한 기술이 있습니까?