물론 Javascript도 예외는 아니지만 객체 참조 문제를 생각해 본 적이 있습니까? 일반적인 접근 방식은 각 객체에 함수를 복제하는 대신 일련의 객체가 클래스의 메서드를 공유하는 것입니다. 객체별로 함수를 복사하는 방법을 살펴보겠습니다.
var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2;
this.showmsg=function()
{
alert("이름:" this.name "n " "age :" this.age);
}
}
var objectone=new myobject('liu',20);
alert(objectone.name); //liu
var objecttwo= new myobject('lin',20);
alert(objecttwo.name); //lin
alert(objecttwo.showmsg())
var objecttwo=new myobject('lhking' ,22) ;
alert(object three.showmsg());
보기에도 좋고 개체 간 간섭도 없이 정상적으로 작업이 완료됩니다. 하지만 새 개체를 생성할 때마다 스크립트 엔진은 해당 개체에 속성과 메서드를 복사합니다. 이것이 메모리 낭비라고 생각하십니까? 클라이언트 측에서 객체를 복사하는 이 방법은 새 인스턴스가 생성될 때마다 모든 속성과 메소드가 복사되어 많은 양의 메모리를 차지하기 때문에 메모리 누수를 유발하기가 매우 쉽습니다.
대규모 JavaScript 애플리케이션에서 가장 먼저 고려해야 할 사항은 메모리 문제입니다.
올바른 사용 방법은 프로토타입 키워드를 사용하여 클래스의 메서드나 속성을 정의하는 것입니다.
var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2; myobject.prototype.showmsg=function( )
{
alert("name:" this.name "n" "age:" this.age)
}
}
var objectone =new myobject('liu', 20);
alert(objectone.name);
var objecttwo=new myobject('lin',20)
alert(objecttwo.name); Alert(objecttwo.showmsg()) ;
var object three=new myobject('lhking',22);
alert(object three.showmsg);
이 경우 객체는 메소드를 공유할 수 있습니다. 즉, showmsg() 함수는 한 번만 정의되고 다른 객체는 자체 메소드를 복사하는 대신 이 메소드를 공유합니다.
Javascript 프로토타입이 완성되었습니다.
JavaScript에서 객체 확장 살펴보기
function rand(x)
{
return Math.ceil(Math.random()*x);
}
임의의 배열을 생성하는 확장 메서드
배열. 프로토타입.random= function()
{
for(var i=(this.length-1);i>1;i--)
{
var j=rand(this.length -1);
var 캐시=this[i];
this[j]=cache
}
var array=new Array ("1","2","3","4","5");
for(var a in array)
{
alert(array[a]) ;
}
array.random();
for(var b in array)
{
alert(array[b])
}
다시 보기 객체 리플렉션 보기
리플렉션은 객체에 대해 아무것도 모르더라도 그 속성과 메서드를 이해할 수 있게 해주는 객체 메커니즘입니다. 일반적으로 프로그래머는 자신이 조작하는 객체가 어떻게 구성되는지 잘 알지 못합니다. 다른 사람이 작성한 복잡한 개체를 사용할 때 일부 특수한 경우에는 이 개체의 속성과 메서드를 빠르게 이해해야 하며 반사 메커니즘을 사용해야 합니다. 물론 반사의 적용은 이에 국한되지 않습니다.
먼저 객체에 특정 속성이나 메서드가 있는지 알고 싶을 수 있습니다.
if (typeof(myobject.someproperty)!="undefine")
{
}
Javascript에서 객체나 변수가 정의되지 않은 경우 항상 정의되지 않은 유형을 반환합니다.
사용할 수도 있습니다. 테스트 범위를 좁히기 위한 기타 내장 클래스:
if(myobject instanceof Object)
{
}
instanceof는 내장 또는 사용자 정의 클래스를 테스트하는 데 사용되는 연산자입니다. class는 Array, String, Date, Number, Math, RegExp, Boolean, Function 및 기타 내장 클래스를 참조합니다. 예: Function 및 Array는 모두 Object 클래스에서 상속되므로 코드에서 Array 객체를 테스트하는 경우 먼저 객체인지 테스트하면 true를 반환합니다. 배열인지 테스트하면 true도 반환됩니다.
더 간단하고 유용한 방법은 개체의 모든 속성과 메서드를 탐색하여 개체의 내부 상태를 빠르게 이해하는 것입니다.
코드 복사