자 바스 크 립 트 에서 대상 을 정의 하 는 몇 가지 방식 (자 바스 크 립 트 에는 클래스 개념 이 없고 대상 만 있 음)

1) 기 존 대상 을 기반 으로 속성 및 방법 확장
var object = new Object();

object.name = "kyle";				//    name
object.sayName = function(name){	//    sayName()
	this.name = name;
	alert(this.name);
}
object.sayName("jack");

2) 공장 방식 창설 대상
(a) 매개 변수 가 없 는 구조 방법
function createObject(){
	var object = new Object();

	object.username = "kyle";
	object.age ="22";

	object.get = function(){
		alert("   :"+this.username+"    :"+this.age);
	}
	return object;
}
var object1 = createObject();
object1.get();
(b) 매개 변 수 를 가 진 구조 방법
매개 변수 가 없 는 구조 방법 은 단점 이 있 습 니 다. 대상 이 생 긴 후에 초기 값 을 수정 하고 다음은 매개 변수 가 있 는 구조 방법 을 사용 합 니 다.
function createObject(username,age){
	var object = new Object();

	object.username = username;
	object.age = age;

	object.get = function(){
		alert("   :"+this.username+"    :"+this.age);
	}
	return object;
}
var object1 = createObject("kyle","22");
object1.get();

같은 결 과 를 얻 었 습 니 다. 상기 두 가지 방법 은 공 통 된 결함 이 있 습 니 다. 하나의 대상 을 만 들 때마다 get () 방법 은 다시 한 번 정의 되 었 습 니 다. 그러면 메모리 비용 을 증가 시 켰 습 니 다. get () 방법 을 여러 대상 에 게 공유 하 는 것 이 좋 습 니 다. 아래 의 방법 을 사용 할 수 있 습 니 다.
function get(){
	alert("   :"+this.username+"    :"+this.age);
}

function createObject(username,age){
	var object = new Object();

	object.username = username;
	object.age = age;

	object.get = get;
	return object;
}
var object1 = createObject("kyle","22");
var object2 = createObject("jack","24");
object1.get();
object2.get();
get () 방법 을 단독으로 정의 합 니 다. object. get = get;get () 방법 을 가리 키 면 여러 대상 이 get () 방법 을 공유 할 수 있 습 니 다.
3) 구조 함수 방식 으로 대상 만 들 기 (a) 매개 변수 없 음
function Person(){
	//          ,js            
	this.username = "kyle";
	this.age = "22";

	this.getInfo = function(){
		alert("  :"+this.username+"  :"+this.age);
	}
	//         return  ,            
}
 var p1 = new Person();
 p1.getInfo();
(b) 매개 변수
function Person(username,age){
	this.username = username;
	this.age = age;

	this.getInfo = function(){
		alert("  :"+this.username+"  :"+this.age);
	}
}
 var p1 = new Person("kyle","22");
 p1.getInfo();

4) 프로 토 타 입 (prototype) 방식 으로 대상 생 성
function Person(){

}
Person.prototype.name = "kyle";
Person.prototype.age = "22";
Person.prototype.getInfo = function(){
	alert("  :"+this.name+"  :"+this.age);
}

var p1 = new Person();
var p2 = new Person();
p2.name = "jack";
p2.age = "24";

p1.getInfo();
p2.getInfo();

단순히 원형 방식 으로 대상 을 정의 하면 구조 함수 에서 속성 에 초기 값 을 부여 할 수 없고 대상 이 생 성 된 후에 만 속성 을 변경 할 수 있 습 니 다.다음은 원형 + 구조 함수 방식 으로 대상 을 정의 하고 속성 은 구조 함수 에 쓰 이 며 방법 은 원형 방식 을 사용한다.
function Person(){
	this.name = "kyle";
	thi.age = "22"
}
Person.prototype.getInfo = function(){
	alert("  :"+this.name+"  :"+this.age);
}

var p1 = new Person();
var p2 = new Person();
p2.name = "jack";
p2.age = "24";

p1.getInfo();
p2.getInfo();

5) 동적 원형 방식 으로 대상 을 만 듭 니 다. 구조 함수 에서 표 지 량 을 통 해 모든 대상 에 게 하나의 방법 을 공유 하고 모든 대상 은 자신의 속성 을 가지 고 있 습 니 다.
function Person(){
	this.name = "kyle";
	this.age = "22";

	if(typeof Person.flag == "undefined"){
		Person.prototype.getInfo = function(){
			alert("  :"+this.name+"  :"+this.age);
		}
		Person.flag = true;
	}
}


var p1 = new Person();
var p2 = new Person();
p2.name = "jack";
p2.age = "24";

p1.getInfo();
p2.getInfo();

좋은 웹페이지 즐겨찾기