JavaScript에서 객체를 만드는 방법에는 여러 가지가 있습니다.
객체 생성자/객체 문자 :
디자인 패턴을 제쳐두고 가장 기본적인 방법은 먼저 객체 생성자를 호출하여 객체를 만들고 객체에 속성을 추가하는 것입니다.
코드 사본은 다음과 같습니다.
var student = new Object ();
학생 .name = "Xiao Ming";
학생 .age = 20;
학생 .getName = function () {
경고 (this.name);
}
문자 그대로의 JavaScript 객체에 익숙한 학생들은 더 나은 글쓰기 방법으로 바뀔 수 있습니다. 적어도 더 간결하게 보입니다.
코드 사본은 다음과 같습니다.
var 학생 = {
이름 : "Xiao Hong",
나이 : 18,
getName : function () {
경고 (this.name);
}
};
단점 : 위의 방법의 단점 중 하나는 동일한 인터페이스를 사용하여 많은 유사한 개체를 만들 때 많은 중복 코드가 생성된다는 것입니다. 이것은 이해하기 쉽습니다. 함수 (방법 또는 클래스)는 일반적으로 공개 방법을 만드는 데 사용됩니다. 위의 객체 생성 프로세스에는 기능의 그림자가 전혀 없으므로 재사용이 없습니다.
공장 모드 :
공장 패턴은 콘크리트 물체를 만드는 과정을 추상화합니다. 블랙 박스와 마찬가지로 함수 (공장 입력)를 호출하고 해당 매개 변수 (다양한 원료)를 통과하면 해당 객체 (공장에서 생성 된 제품)가 나옵니다. 공장 패턴은 여러 유사한 객체를 만드는 문제를 해결합니다.
코드 사본은 다음과 같습니다.
함수 student factory (이름, 나이) {
var student = new Object ();
학생 .name = 이름;
학생 .age = 연령;
학생 .sayname = function () {
경고 (this.name);
}
반품 학생;
}
var p1 = StudentFactory ( "Ming", 20);
var p2 = StudentFactory ( "Hong", 18);
단점 : 공장 패턴에는 단점이 있으며 가장 큰 단점은 객체 유형 인식 문제입니다. 객체가 객체 유형 (P1 인스턴스 객체)이라는 점만 결정할 수 있지만 어떤 유형인지를 결정하는 것은 불가능합니다. 공장 모드를 사용하여 만든 학생들은 실제로 비슷한 속성과 방법을 가지고 있지만 값은 다릅니다. 이 시점에서 더 나은 솔루션은 모든 객체가 학생 유형에 속하도록 학생 기능을 만드는 것입니다. 따라서 공장 모드는 나쁘지 않지만 생성자 모드가 더 좋습니다.
사용자 정의 유형 생성자 :
생성자는 특정 유형의 객체를 만드는 데 사용될 수 있습니다.
코드 사본은 다음과 같습니다.
기능 학생 (이름, 연령) {
this.name = 이름;
this.age = age;
this.sayname = function () {
경고 (this.name);
}
}
var p3 = 신입생 ( "Ming", 20);
var p4 = 신입생 ( "Hong", 18);
경고 (P3 인스턴스 학생);
경고 (p3.sayname == p4.sayname); //거짓
단점 : 사용자 정의 생성자의 단점은 각 객체가 자체 방법을 재현한다는 것입니다. 실제로, 이러한 방법은 (SayName과 같은) 동일하지만 동일하지는 않습니다 (p3.sayname 및 p4.sayname은 동일하지 않음).
프로토 타입 모드 :
빈 함수를 정의하고 모든 특성과 메소드를 프로토 타입에 추가하여 모든 객체가 이러한 특성과 메소드를 공유하도록하십시오.
코드 사본은 다음과 같습니다.
함수 학생 () {};
학생 .prototype.name = "Ming";
학생 .prototype.age = 20;
학생 .prototype.friends = [ 'qi'];
학생 .prototype.sayname = function () {
경고 (this.name);
};
단점 : 일부 속성을 공유 할 수 없으며 공유하면 다음과 같은 문제가 발생합니다. 각 학생의 대부분의 친구는 동일하지 않습니다.
생성자와 프로토 타입의 조합 :
코드 사본은 다음과 같습니다.
기능 학생 (이름, 나이, 친구) {
this.name = 이름;
this.age = age;
이. 친구 = 친구;
}
학생 .prototype = {
생성자 : 학생,
SayName : function () {
경고 (this.name);
}
};
요약 : 생성자와 프로토 타입의 조합은 사용자 정의 유형을 만드는 널리 인식되는 방법입니다. 위의 방법 중 가장 좋은 방법입니다.
/*******************************************************************************************************/
실제로 위의 객체를 만들기위한 많은 방법이 있지만 계속 최적화가 필요한 몇 가지 특별한 시나리오가 있습니다.
동적 프로토 타입 모드 :
생성자와 프로토 타입의 조합을 최적화 한 것입니다. 이러한 일반적인 속성 및 방법의 경우 초기화 된 경우 효율성을 향상시키기 위해 초기화를 반복 할 필요가 없습니다.
코드 사본은 다음과 같습니다.
기능 학생 (이름, 연령) {
this.name = 이름;
this.age = age;
if ((type this.sayname)! = "function") {
학생 .prototype.sayname = function () {
경고 (this.name);
}
}
}
var stu = 새로운 사람 ( "Ming", 20);
// Alert (stu instance of student);
stu.sayname ();
var stunew = 새로운 사람 ( "Hong", 18);
// Alert (Stunew instanceof Student);
stunew.sayname ();
여러 학생 객체가 만들어지면 SayName 메소드는 한 번만 초기화됩니다.
마지막으로, 기능을 안전하게 구성하는 객체를 만드는 매우 유용한 또 다른 방법이 있습니다.
안정적인 생성자 패턴 :
이 모드에서는 이것과 새로운 것이 금지되며 모든 객체에는 공개 속성이 없습니다. 변수의 값 만 읽지 만 수정되지 않았습니다.
코드 사본은 다음과 같습니다.
//// Stafe 생성자 모드
기능 학생 (이름, 연령) {
var o = new Object ();
o.sayname = function () {
경고 (이름);
}
반품 o;
}
var stu = 학생 ( "Ming", 21);
stu.sayname ();
위의 내용은 매우 포괄적 인 사용자 정의 객체를 만드는 몇 가지 일반적인 JavaScript 방법을 요약합니다. 더 나은 것이 있으면 저에게 연락하십시오. 이 기사는 계속 업데이트되고 있습니다.