먼저 살펴보세요:
var objJson={
op1: 'objJson option1',
fn1:function(){
Alert(this.op1)
}
}
이러한 선언 형식으로 , objJson.op1 또는 objJson.fn1()을 통해 내부 속성에 직접 액세스하는 데 문제가 없습니다. 하지만 이런 경우에는
var objFn =function(){
this.op1='objFn.op1';
this.op2=function(){
경고(this.op1)
}
}
그런 다음 objFn.op1 또는 objFn.op2()를 사용하여 내부 속성에 직접 액세스하면 현재 개체가 아니기 때문에 작동하지 않습니다.
그래서 인스턴스화해야 합니다
var inst =new objFn();
alert(inst.op1);
inst.op2();
이렇게 하면 원하는 값을 얻을 수 있습니다.
JSON 형식으로 개체를 복사하려면 매우 간단하지만 문제가 있습니다.
var newone=objJson;
newone.op1='changed'
alert('objJson.op1');
원본을 찾을 수 있습니다. 개체의 op1 값도 변경되었습니다. 그러나 두 번째 개체 선언 방법을 사용하면 수정은 인스턴스 내에서만 이루어지며 다른 인스턴스에는 영향을 미치지 않습니다.
따라서 JSON과 같은 정적 개체는 일반적으로 사용되는 일부 라이브러리를 작성할 때 사용하기에 적합합니다. 자체 네임스페이스가 있으므로 누구도 다른 사람을 방해하지 않으며 사용하기 쉽습니다.
생성자의 "public" 및 "private" 속성
위 생성자를 수정하겠습니다.
var objFn=function(){
var pri1='private 변수';
this.op1='public 변수'; 🎜>this.op2 =function(){
Alert(pri1 ',' this.op1)
}
};
var o=new objFn(); typeof o.pri1 ' ,' typeof o.op1);//undefine, string
o.op2();//Private 변수, Public 변수
Private 변수는 허용되지 않습니다. 객체 외부에서 액세스하면 모두 typeof 이후에는 정의되지 않습니다. 개인 메소드에 대한 액세스를 살펴보겠습니다.
코드 복사
var pri2=function(){
this.op2()
this.op1 ='공용 변수' ;
this.op2=function(){
경고(pri1 ',' this.op1)
this.acPri=function(){
pri2.call(this );
};
var o=new objFn()
o.acPri();//개인 변수
참고 JavaScript의 클로저 기능으로 인해 public 메소드 acPri()를 통해 private 메소드 pri2를 호출할 때 call을 사용하여 프로그램의 컨텍스트를 전달해야 합니다. 그러나 이는 너무 혼란스러운 것 같습니다. 조금 마무리하겠습니다.
코드 복사
코드는 다음과 같습니다.
};
this.op1='공용변수';
this.op2=function(){
Alert(pri1 ',' this.op1)
this.acPri=function (){
pri2.();
};
var o=new objFn()
o.acPri();//개인 변수
물론 최종 결과는 여전히 변함이 없습니다.
재인쇄 시 다음 사항을 지켜주세요
저자: Beiyu(tw:@rehawk)