아니요 (실제로는 컴파일되지만 실제로는 의도하지 않은 것일 수 있습니다).
나는 당신이 barsArray
회원의에 BarClass
객체를 추가 addBar
방법으로 FooClass
클래스를 생성 할 있으리라 믿고있어.
addBar
함수는 FooClass
함수/생성자 내의 로컬 변수에 불과합니다. 생성자 외부에서 액세스 할 수있게하려면 this.addBar
에 할당해야합니다. index
을 늘리는 것 외에도 FooClass
으로 변경해야합니다.
클래스 BarClass
클래스의 경우 "클래스"는 실제로는 생성자 함수에 불과하다는 것을 기억하십시오. 별도의 생성자가 필요하지는 않습니다. BarClass
은 색인을 가져와 this.myIndex
에 할당하는 단일 함수 일뿐입니다.
function FooClass()
{
// use this.barsArray = [], etc if you want them to be publically available
var barsArray=[]; // It's usually better to use "[]" instead of "new Array()"
var index=0;
this.addBar = function() {
barsArray[index]=new BarClass(index);
index++;
}
}
function BarClass(index)
{
this.myIndex=index;
}
는 속성 대신 지역 변수 ("this.barsArray = []"및 "this.index = 0」)로 barsArray
및 index
을 변경하면 FooClass.prototype
에 addBar
넣어 거기에만 의지 할 함수의 인스턴스 일 수 있습니다.
function FooClass()
{
this.barsArray=[];
this.index=0;
}
FooClass.prototype.addBar = function() {
this.barsArray[this.index]=new BarClass(this.index);
this.index++;
};
참고로, 객체와 배열은 모든 의도와 목적을 위해 JavaScript에서 동일합니다. – KyleFarris
배열에서 할 수있는 것처럼 (x = 1; x
길이 속성을 정의하고 최신으로 유지 한 경우 * 할 수 있습니다. 또한 올바른 "숫자"속성이 있어야합니다 (모든 속성은 실제로는 문자열이지만 숫자처럼 보이는 문자열은 특별히 처리됩니다). 배열은 빠른 액세스를 위해 최적화되고 모든 숫자 속성을 포함하도록 "길이"를 자동으로 업데이트하므로이 작업을 수행하지 마십시오. –