코드는 다음과 같습니다.
그런데 이 객체를 프로토타입으로 어떻게 사용할 수 있나요?
우선 JSON 객체에는 생성자 메소드가 있을 수 없으므로 간단한 "팩토리"를 만들고 생성을 담당하는 메소드를 구체적으로 작성해 보겠습니다.
그러나 이 방법을 통해 우리는 People을 프로토타입으로 사용할 수 없다는 것을 발견했습니다. Javascript 연구 노트 7 — —프로토타입 체인의 원리에 대한 이 기사에서는 이 프로세스에 대해 생각해 보겠습니다.
var p=new People();==>p.__proto__=People.prototype. 따라서 p.SayHello()를 실행하면 People.prototype으로 이동하여 검색하지만 아무것도 찾을 수 없습니다.
People.prototype.SayHello=function(){}을 사용하면 이 문제를 해결할 수 있습니다. 하지만 우리는 함수만이 프로토타입을 가질 수 있다는 것을 알고 있습니다.
그럼 앞선 파생식을 생각해보면 p.SayHello()는 어떻게 만들 수 있을까요? p.__proto__=People이 가능하다면 좋을 것 같습니다. 그런 다음 다음과 같은 방법을 생각해냅니다.
new에서는 특정 객체의 __proto__가 특정 함수의 프로토타입과만 같을 수 있으므로 함수 X를 설정하고 p.__proto__=X.prototype을 설정합니다. , 그런 다음 X.prototype=People을 설정합니다. 관계는 다음과 같습니다.
이는 X를 사용하여 중간 변수를 만드는 것과 동일하며 이를 통해 JSON 개체의 내부 속성에 액세스할 수 있습니다. 그런데 이건 촌스럽지 않은가? 객체를 생성할 때마다 이러한 보조 함수를 작성해야 합니다. 자, 이 프로세스를 요약해 보겠습니다.
코드 복사
코드는 다음과 같습니다. var Factory = { CreatePeople : function (className,name,age) {
var temp = function () {
className.Create(name, age)
temp.prototype = className;
var result = new temp();
return result;
}
var people = Factory.CreatePeople(People,"kym",21); people.SayHello();
하지만 이것도 단점이 있습니다. 즉, 클래스를 추가할 때마다 Factory에 새로운 메소드를 등록해야 한다는 것입니다. 사용 방법: 호출 및 적용 여기서는 매개변수가 고정되어 있지 않기 때문에 하나씩 나열할 수 없으므로 여기에서 적용을 사용하여 이 방법을 개선할 수 있습니다.
코드 복사
코드는 다음과 같습니다.