JavaScript의 모든 것은 객체입니다 : 문자열, 배열, 값, 함수 등. JS에는 개념이 없습니다.
그러나 우리는 JS의 문법적 특성을 사용하여 클래스 아이디어로 객체를 만들 수 있습니다.
원래 방법
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
var obj = new Object ();
obj.name = "koji"; // 객체에 속성을 추가합니다
obj.age = 21;
obj.howname = function () {// 객체에 메소드를 추가합니다
경고 (this.name);
}
obj.showage = function () {
경고 (this.age);
}
obj.howname ();
obj.showage ();
</스크립트>
위의 방법은 새로운 키워드를 통해 객체를 생성 한 다음 JS에 따라 동적 언어 특성의 속성과 방법을 추가합니다.
객체를 만듭니다. 그중에서도 이것은 메소드를 호출하는 객체입니다.
이러한 방식으로 문제는 객체를 여러 번 만들어야하는 경우 코드를 여러 번 반복해야하며 코드 재사용에는 도움이되지 않습니다.
공장 방법
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
함수 createobj () {
var obj = new Object ();
obj.name = "Koji";
obj.age = 21;
obj.howname = function () {
경고 (this.name);
}
obj.showage = function () {
경고 (this.age);
}
reture obj; / 객체로 돌아갑니다
}
var obj1 = createobj ();
var obj2 = createobj ();
obj1.howname ();
obj2.showage ();
</스크립트>
이 방법은 코드 재사용 속도를 향상시키고 공장 방법을 변경하고 매개 변수 할당을 전달할 수도 있습니다.
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
함수 createobj (이름, age) {// 객체를 구성 할 때 초기화 매개 변수를 전달할 수 있습니다.
var obj = new Object ();
obj.name = 이름;
obj.age = 나이;
obj.howname = function () {
경고 (this.name);
}
obj.showage = function () {
경고 (this.age);
}
reture obj; / 객체로 돌아갑니다
}
var obj1 = createobj ( "Koji", 22);
var obj2 = createobj ( "luo", 21);
obj1.howname ();
obj1.showage ();
obj2. showname ();
obj2.showage ();
</스크립트>
위의 방법은 코드의 갱신 속도를 높일 수 있지만 객체 지향 클래스의 개념에 비해 큰 결함이 있습니다. 누들
상대 이미지는 객체의 속성을 강조하고 객체의 방법이 공유됩니다. 그리고 서로의 객체를 만들기위한 위의 공장 방법
물체는 자신의 이기적인 방법을 만듭니다. 동시에, 각 객체에 대해 동일한 논리를 생성하는 동일한 방법은 메모리 낭비입니다. 다음과 같이 개선되었습니다
다음과 같이 코드 코드를 복사하십시오.
<span style = "font-size : 14px;"> <script type = "text/javaScript">
함수 createobj (이름, 나이) {{
var obj = new Object ();
obj.name = 이름;
obj.age = 나이;
obj.howname = showameam;
obj.showage = showage;
reture obj; / 객체로 돌아갑니다
}
함수 showingame () {// 함수도 객체입니다
경고 (this.name);
}
함수 show () {
경고 (this.age);
}
var obj1 = createobj ( "Koji", 22);
var obj2 = createobj ( "luo", 21);
obj1.howname ();
obj1.showage ();
obj2. showname ();
obj2.showage ();
</script> </span>
위의 -언급 된 기능 객체는 다른 개체 보유 함수 객체의 개인 문제를 해결하도록 정의됩니다. 이제 모든 객체가 있습니다
위의 두 기능을 참조하십시오. 그러나 이런 식으로, 물체의 기능은 독립적이고 물체와 관련이 없었다. 이것과
객체 지향적 인 특정 방법에 대한 특정 방법은 특정 범주의 생각을 충족하지 않습니다.
시공 기능 방법
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
// 생성자를 정의하여 해당 객체를 생성합니다
기능 담당자 (이름, 나이) {
// 새로운 사람에게 전화 할 때, 첫 번째 코드 줄을 실행하기 전에 사람은 사람의 대상이고 객체는 메모리에 있습니다.
//이 키워드에 인덱스 할당이 제공됩니다.
this.name = name; //이 키워드는 덜되어서는 안됩니다. 현재 객체, 즉이 키워드에서 참조 된 개체의 이름 속성 할당
// 실제로 이름 속성을 현재 객체에 추가 한 다음 이름 속성에 값을 할당하는 것과 같습니다.
this.age = age;
this.howname = function () {// 현재 객체에 메소드 추가
경고 (this.name);
}
this.showage = function () {
경고 (this.age);
}
// 현재 객체를 할당 기호의 왼쪽에있는 변수로 반환합니다 (반환을 사용할 필요 없음)
}
var obj1 = 새로운 사람 ( "Koji", 22);
var obj2 = 새로운 사람 ( "luo", 21);
obj1.howname ();
obj1.showage ();
obj2. showname ();
obj2.showage ();
</스크립트>
함수 구성 방법은 공장 메소드와 동일하며 각 객체에 대한 독점 함수 객체를 만듭니다. 물론, 당신은 또한 이러한 기능을 넣을 수도 있습니다
객체는 생성자 외부에 정의되므로 객체와 방법이 서로 독립적입니다.
프로토 타입 방법 :이 방법이 사용하는 객체의 프로토 타입 속성
다음과 같이 코드 코드를 복사하십시오.
스크립트 유형 = "텍스트/JavaScript">
function person () {} // 공기 구성 기능을 정의하고 매개 변수를 전달할 수 없습니다.
// 모든 속성의 모든 방법을 프로토 타입 속성에 제공합니다.
person.prototype.name = "koji";
person.prototype.age = 22;
person.prototype.howname = function () {// 메소드 추가
경고 (this.name);
}
person.prototype.showage = function () {
경고 (this.age);
}
var obj1 = 새로운 사람 ();
var obj2 = 새로운 사람 ();
obj1.howname ();
obj1.showage ();
obj2. howname ();
obj2.showage ();
</스크립트>
Person Object가 생성되면 프로토 타입의 속성이 새 개체에 할당됩니다. 그런 다음 속성과 방법이 공유됩니다.
이 방법의 문제점은 생성자를 전달할 수없고 새로 생성 된 각 객체는 기본값을 가지고 있다는 것입니다. 둘째, 메소드 공유는 공유되지 않습니다
모든 문제이지만 속성 공유는 속성이 상태를 변경할 수있는 객체 인 경우 문제입니다.
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
function person () {} // 공기 구성 기능을 정의하고 매개 변수를 전달할 수 없습니다.
person.prototype.age = 22;
person.prototype.array = new Array ( "Koji", "Luo");
person.prototype.showage = function () {
경고 (this.age);
}
person.prototype.showarray = function () {
경고 (this.array);
}
var obj1 = 새로운 사람 ();
var obj2 = 새로운 사람 ();
obj1.array.push ( "kyo"); // OBJ1의 배열 속성에 요소를 추가합니다.
obj1.showarray (); // Koji, Kyo
obj2.showarray (); // Koji, Kyo
</스크립트>
위의 코드가 OBJ1의 속성에 요소를 OBJ1의 속성에 추가하면 OBJ2의 ARRA 속성 요소도 다음과 같이
영향은 OBJ1 및 OBJ2 객체의 배열 속성이 동일한 배열 객체를 인용한다는 것입니다.
물체, 배열 객체의 속성은 자연스럽게 자연스럽게 영향을받습니다.
혼합 생성자/프로토 타입 방법
생성자를 사용하여 객체의 속성을 정의하고 프로토 타입을 사용하여 객체를 정의하여 속성을 달성 할 수 있습니다.
개인 및 메소드 공유.
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
기능 담당자 (이름, 나이) {
this.name = 이름;
this.age = age;
this.array = new Array ( "Koji", "Luo");
}
person.prototype.howname = function () {
경고 (this.name);
}
person.prototype.showarray = function () {
경고 (this.array);
}
var obj1 = 새로운 사람 ( "Koji", 22);
var obj2 = 새로운 사람 ( "luo", 21);
obj1.array.push ( "kyo"); // OBJ1의 배열 속성에 요소를 추가합니다.
obj1.showarray (); // Koji, Kyo
obj1.howname ();
obj2.showarray ();
obj2. showname ();
</스크립트>
속성이 비공개 인 후에는 각각의 속성을 변경해도 다른 객체에 영향을 미치지 않습니다. 동시에이 방법은 각 객체에서 공유됩니다. 의미 적으로,
이것은 Face -Object 프로그래밍의 요구 사항을 충족합니다.
동적 프로토 타입
다음과 같이 코드 코드를 복사하십시오.
<script type = "text/javaScript">
기능 담당자 (이름, 나이) {
this.name = 이름;
this.age = age;
this.array = new Array ( "Koji", "Luo");
// 사람의 _initialized가 정의되지 않은 경우, 아직 사람의 프로토 타입에 메소드를 추가하지 않았 음을 나타냅니다.
ifop person._initialized == "underfined")
{{
person.prototype.howname = function () {
경고 (this.name);
}
person.prototype.showarray = function () {
경고 (this.array);
}
person._initialized = true;
}
}
var obj1 = 새로운 사람 ( "Koji", 22);
var obj2 = 새로운 사람 ( "luo", 21);
obj1.array.push ( "kyo"); // OBJ1의 배열 속성에 요소를 추가합니다.
obj1.showarray (); // Koji, Kyo
obj1.howname ();
obj2.showarray ();
obj2. showname ();
</스크립트>
이 방법은 생성자/프로토 타입과 유사합니다. 동시에 메소드를 생성자에 넣으십시오.
IF 문을 한 번만 성공적으로 실행할 수 있도록 기능 담당자에게 속성이 추가됩니다.
실제 응용 분야에서 가장 널리 사용되는 것은 생성자/프로토 타입 방법입니다. 동적 프로토 타입 방법도 매우 인기가 있으며 기능과 구조가 있습니다.
기능/프로토 타입 방법은 동일합니다. 생성자 또는 프로토 타입 방법 만 사용하지 마십시오.