JavaScript로 가상 클래스와 프로토 타입을 처음 접했고 제대로 구현하기가 어려웠습니다. 내가 뭘 하려는지 일부 필드와 기본 '클래스'가 다음 개체 리터럴로 정의 된 내 메서드를 사용하여 기본 클래스의 프로토 타입을 만듭니다. 나는이 방법을 쓰는 것에서 벗어나 내 메서드의 기본 클래스 내에서 싱글 톤을 사용하는 것 사이에 찢겨 버렸다. 나는이 방법을 이렇게하는 것이 좀 더 우아하다고 생각하지만 새로운 개체를 만들 때마다 모든 메서드를 실제로 만들지는 않는다고 생각합니다.JavaScript 프로토 타입 작업 및 기본 클래스 필드 액세스.
어쨌든 작은 문제는 내 메서드에서 기본 클래스의 필드를 참조하는 것입니다. 왜냐하면 this.field로 참조하려고 할 때 이것은 현재 함수/범위를 가리키는 것이지만 새로 작성한 객체를 참조하기를 원합니다. 이 문제가 해결되었거나 방법을 변경하는 방식을 변경해야합니까?
아래 코드는 내가하고있는 일과 내가 겪고있는 문제를 명확하게 해줄 것이라고 생각합니다.
function BaseClass() {
this.items[];
this.fieldOne = "asdasd";
}
BaseClass.prototype = {
methodOne: function (input) {
function addElement(a. b) {
var element = {};
element.prop1 = a;
element.prop2 = b;
//The issue I am having is that items is undefined, how can I refernce the parent class object.
this.items.push(element);
}
function traverse() {
//go through a list and add a bunch of elements
addElement("ASdasd", 324);
}
},
methodTwo: function() {
//see now fieldOne is asdasd
console.log("fieldOne" + fieldOne);
}
}
var forTest = new BaseClass();
forTest.methodTwo();
는 그래서 그래 내가 어떤 방법에서 액세스 할 수있는 상위 클래스의 일부 필드를 갖고 싶어,하지만 난 모든 메소드마다의 I를 작성하지 않도록 차라리 그냥 내 기본 클래스의 기능을 붙이지 않을 겁니다 BaseClass에서 새 객체를 만듭니다. 이 문제를 해결할 수있는 방법이 있습니까?
도움을 미리 감사드립니다.
때마다 모든 방법을 만드는 "발생하지 않습니다 : 사실
가 전역 객체에 바인딩 된이에 대한 ususal 해결 방법은 같다 ". – Alnitak
"트래버스"기능은 어디에서 어떻게 호출합니까? – Bergi
@Alnitak 예, 그게 바로 내가 피하려고하는 것입니다. 죄송합니다. 제가 잘못 말하면 죄송합니다. 메소드를 호출 할 때만 새로운 객체가 생성 될 때마다 모든 메소드를 생성하고 싶지 않습니다. – recneps