프로토 타입 방법의 요점은 무엇입니까?


10

Javascript : The Good Parts를 읽고 시제품에 대한 섹션을 둘러보기 위해 고심했습니다 .

약간의 구글 후, 나는 객체 선언 객체에 속성을 추가하는 것이라고 결론을 내렸다 .

w3schools에서 번쩍 이는이 스크립트를 사용하여 prototype 속성을 추가하는 줄을 제거해도 아무런 영향없음을 알았 습니다 . 그래서 요점이 뭐야?


//Prototyping

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null; //  <---  try removing this line
fred.salary=20000;

document.write (fred.salary);


4
@Raynos는 잘 말했지만 MDN 문서와 같은 대체품도 제안합니다. developer.mozilla.org/en/JavaScript
StuperUser

답변:


13

프로토 타입이 작동하는 방식은 아닙니다. 프로토 타입은 프로토 타입 체인에서 사용됩니다.

객체에서 속성을 얻으려고 할 때마다 해당 속성 이름의 객체를 확인합니다. 존재하지 않는 경우 프로토 타입을 살펴 봅니다.

예:

var o = {
  "foo": "bar",
  "method": function() { ... }
};

var o2 = Object.create(o);
var o3 = Object.create(o);

console.log(o2.hasOwnProperty("foo")); // false
console.log(o2.foo); // "bar"
console.log(o2.__proto__ === o); // true
o.baz = "foobar";
console.log(o2.baz); // "foobar"

따라서 프로토 타입의 핵심은 단순히 코드 재사용과 상속입니다.


알았어, 이제 나왔어 하지만 속성을 동적으로 추가하려고했는데 prototype is undefined---o.prototype.newProp = "mutts nuts";
Mild Fuzz

3
@MildFuzz o는 객체입니다. 이 .prototype속성은 함수에 사용되므로 무시하십시오. 그냥하세요o.newProp = "mutts nuts"
Raynos

7

fred.salary=20000당신이 fred 급여에만 급여 속성을 추가 했을 때 . 프로토 타입을 사용할 때 그때부터 만들 모든 직원은 급여 속성을 갖습니다.

직원 수가 100 명이고 모든 직원에게 급여 속성을 추가하려고한다고 가정하십시오. 수동으로 수행하고 각 직원을 반복하여 추가 할 수 있습니다. 또는 프로토 타입을 사용하여 모든 경우에 설정할 수 있습니다.

프로토 타입은 이미 존재하는 기능을 수행 할 때 유용합니다. 배열에 사용자 정의 메소드를 추가한다고 가정하십시오. 당신은 다음과 같은 일을 할 것입니다 :

Array.prototype.my_custom_method = function() {...}

거기서부터 생성 할 모든 배열에 해당 방법을 사용할 수 있습니다.


3
나는 이것이 메모리 사용을 줄 이도록 설계된 것이라고 아무도 언급하지 않은 것에 놀랐다. 코드가 많은 복잡한 객체를 구현해야하는 경우 객체의 모든 인스턴스에서 코드가 반복되는 것을 원하지 않습니다. 분명히 데이터 속성은 각 인스턴스마다 다를 가능성이 높지만 일반적으로 코드의 사본 하나만 원하므로 프로토 타입에 넣습니다.
Dominic Cronin

1
IMO 이것은 지금까지 가장 좋은 대답입니다.
머핀 맨

5

이 기사를 살펴볼 수도 있습니다 .

프로토 타입 기반 언어에는 프로토 타입 객체라는 개념이 있으며, 새로운 객체의 초기 속성을 가져 오는 템플릿으로 사용되는 객체입니다. 모든 객체는 객체를 만들거나 런타임에 고유 한 속성을 지정할 수 있습니다. 또한 모든 객체를 다른 객체의 프로토 타입으로 연결하여 두 번째 객체가 첫 번째 객체의 속성을 공유 할 수 있습니다.

일련의 객체에 대한 프로토 타입으로 사용되는 객체에 속성을 추가하면 해당 객체가 프로토 타입 인 객체도 새 속성을 가져옵니다.

이것이 클래스 기반 언어에 비해 프로토 타입 기반 언어의 주요 장점 중 하나입니다.

또한 필요한 경우 JS를 사용하여 클래식 OO 상속을 얻는 것은 쉽지만 기본적으로 구현하지 않는 언어에 대한 프로토 타입 모델을 얻는 것이 어려운 경우가 많습니다.


3
클래스 기반 및 프로토 타입 기반 언어 기사의 +1
adivasile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.