JS는 객체 지향 아이디어를 사용하여 Java | C ++와 같은 객체 지향 언어를 시뮬레이션 할 수있는 객체 기반 언어입니다.
• 프로세스 지향
◦ 문제를 해결하기위한 단계를 팔로우하십시오
• 객체 지향
◦ 문제를 해결하는 데 필요한 객체 (내용 및 역할)에 대한 피커스를 한 다음 비즈니스 로직에 따라 특정 규칙에 따라 관련 방법을 호출하십시오.
객체는 시스템 객체 및 사용자 정의 객체로 나뉩니다. 배열 | 날짜 등과 같은 시스템 생성자를 호출하여 시스템 객체를 만들 수 있습니다. 사용자 정의 객체는 자체적으로 생성해야하며 시스템 기능을 사용하여 생성 할 수 없습니다.
JavaScript 객체를 만듭니다
1. 직접 만듭니다
// 직접 생성 // js 객체 생성 // 1 : 빈 개체 생성 var person1 = new Object (); // 2 : 객체의 필요한 속성과 메소드를 person1.name = "ailer"에 추가합니다. 콘솔 .log (person1.name); person1.gender = "남성"; // 3 :이 객체에 추가 된 메소드 | (함수) person1. manager = function () {Console .Log ( "Ailer는 내 영어 이름입니다"); } // 4 : 호출 객체 메소드 : 객체. 메소드 이름 (); person1.manager (); // 기능 | 메소드? 함수가 객체에 속할 때 함수는이 객체의 메소드에 속합니다. 함수는 메소드 이름을 통해 호출됩니다. // 변수 | 속성? 변수가 특정 객체에 속하는 경우 변수는이 객체의 메소드입니다. 속성 이름으로 변수를 호출하십시오. // person1.age = "6"증가; // change person1.name = "레몬"; // 콘솔 확인 .log (person1.name); // 삭제 person1.age; 콘솔 .log (person1.age); ==> undefined // 참조 유형, 저장 주소 // 기본 유형 : 저장 값 플래그 비트/* var arr1 = [1,2,3,4] var arr2 = [5, 6, 7,9]; var arr2 = arr1; // arr2 [0] = 10; // arr2에서 값을 변경하고, ARR1도 경고를 변경합니다 (ARR1 [0]); // ===> 10 참조 유형*/var per2 = new Object (); per2.name = "Relia"; per2.age = "18"; per2.gender = "femal"; per2.hobby = "레몬"; // 1 : 액세스 속성을 통해. (Point Syntax) // 2 : [] (Square Brackets)를 통해 물체의 속성에 액세스합니다. 사각형 브래킷은 속성 문자열을 저장하는 속성 문자열 또는 변수 여야합니다 | 정사각형 브래킷 var n = "name"//console.log(per2;"name" 숙소) ;//double Quotes Console .Log (Per2 [n]); for (per2의 var 속성) {// console.log (per2 [property]); }직관적이지만 여러 객체를 만들 때 코드가 중복됩니다.
2. 함수를 사용하여 생성 (공장 모드)
여러 유사한 객체 선언의 문제를 해결하기 위해 공장 패턴이라는 방법을 사용할 수 있습니다.이 방법은 많은 복제로 개체를 인스턴스화하는 문제를 해결하는 것입니다.
// 생성자 함수 정의 CreatePerson (이름, age) {// 새 빈 개체 생성 var person = new Object; // 속성 추가 | 메소드 person.name = name; person.age = 나이; 사람. manager = function () {콘솔 .Log ( "ai"); } // 리턴 리턴 사람; } var per1 = CreatePerson ( "aier", 12); 콘솔 .log (per1.name); var per2 = CreatePerson ( "레몬", 23); 콘솔 .log (per2.age); Console.log (Per2 instanceof object); // true console.log (per2 createperson의 per2 instance); // false // 객체 유형 console.log (per2.manager == per1.manager); // per1 및 per2 공간이 각각 획득 될 수 있습니다.우수 : 비슷한 인스턴스의 대량 생성
누락 : 인스턴스는 유사한 속성을 사용하여 메모리 폐기물이 공개되고 객체의 유형을 구별 할 수 없습니다.
3. 문자 그대로 창조
우수 : 단순하고 직접
누락 : 배치로 비슷한 객체를 만들 수 없습니다
// 리터럴에 의해 생성 된 객체는 인스턴스를 가리키지 않지만 var per1 = {name : "ailer", 생성자 : 생성자 : per1, 나이 : 12, 성별 : "여성", 취미 : "놀이", function () {console.log (this.name); }} per1.eat (); // ailer per1.name = "레몬"; per1.eat (); // lemon console.log (typeof per1); // object console.log (per1.constructor == Object); // true4. 새로운+생성자
// 생성자는 객체를 생성하고 해당 객체는 인스턴스로 인식되지 않습니다. 새로운+obj // 객체가 인식되지만 일부 코드 영역은 여전히 낭비됩니다. ==> 프로토 타입 생성 // js 개체 생성 new 객체 새+생성자 // 1 : 생성자 생성 | 일반적으로 첫 번째 문자는 자본화 된 기능 CreatePerson (이름, age) {// 2 :이 포인터의 객체의 속성을 부착합니다. 객체를 만들기 위해 함수가 호출되면이 포인터는이 새로운 객체를 가리 킵니다. // 이것은이 개체에 추가됩니다 .name = name; this.age = age; /* this.speak = function () {// 여기서 이것은 생성 객체 console.log (this.name+"hello")를 가리 킵니다. }} /* createPerson.prototype.gender = "20"; CreatePerson.Prototype. ea = function () {콘솔 .log (this.name+ "sfd"); }*/// __proto__ : is : 인스턴스 객체의 프로토 타입 속성은 해당 생성자에 해당하는 프로토 타입 객체를 가리키며 // var var1 = new CreatePerson ( "Ailer", "20"); var per2 = 새로운 CreatePerson ( "Relia", "18"); 콘솔 .Log (Per1 CreatePerson의 인스턴스); // == True Console .Log (Per2 CreatePerson의 인스턴스); // ==> True Console .Log (Per1.speak == Per2.speak); // == False는 시스템이 두 가지 다른 코드 영역을 열어 메모리 폐기물을 유발했음을 의미합니다.문자를 만드는 것이 더 편리하므로 생성자, 정상 생성자 (공장 패턴)를 생성하며 하위 객체 인스턴스가 인식되지 않고 메모리가 낭비됩니다. 새+ 생성자를 사용하면 하위 객체가 인식되지만 일부 코드는 여전히 복제되고 메모리가 낭비되며 프로토 타입 코드가 생성되어이를 해결합니다.
5. 프로토 타입 모드
함수 createEanimal (이름, age) {//1.2 : 외부 매개 변수를 인스턴스 속성에 바인딩 is.name = name; this.age = age; } //1.3 프로토 타입 (프로토 타입 속성, 프로토 타입 방법)에서 동일한 속성을 바인딩합니다. createEanimal.prototype.style = function () {console.log (this.name + "ailers"); }; // 2 : 생성자에게 전화하여 객체 var cat1 = new CreateEanimal ( "XiaoHua", "2")을 만듭니다. var cat2 = 새로운 createanimal ( "Xiaohua", "2"); cat1.style (); console.log (cat1.style == cat2.style); // 메소드는 동일한 주소를 참조하고, 프로토 타입 객체에 속성을 제작하여 주소를 저장하기 위해 속성을 넣을 수 있습니다. instansof는 [function]에 속하는 객체를 결정할 수 있습니다. // 생성자 빌더는 [constrattor] [constant]에 속하는 객체를 결정할 수 있습니다. console.log (createanimal의 cat1 인스턴스); // true console.log (cat1 인스턴스); // true console.log (cat1 인스턴스 개체); // true console.log (cat1.constructor == createeanimal); // true console.log (cat1.constructor == object)의 차이; // == false // 생성자의 프로토 타입에는 생성자 함수 console.log (createEanimal.prototype.constructor == createEanimal)을 나타내는 생성자 속성이 있습니다. //이 개체에 속성이 존재하는지 여부를 결정합니다. 이 속성은 인스턴스 속성 또는 프로토 타입 // alert (cat1의 "name") // true // alert (cat1의 "gender"); // true // hasownproperty : 특정 속성이 인스턴스 속성인지 또는 프로토 타입 속성에서 상속되는지 여부를 결정하려면, 다른 것이 존재하지 않는다 | 거짓을 반환하지 않습니다. console.log (cat1.HasOwnProperty ( "aaa")); // 거짓이 아닌 속성은 존재하지 않는 속성이 거짓 콘솔을 반환합니다 (cat1.HasOwnProperty ( "name")); // true instance property console.log (cat1.hasownproperty ( "style")); 프로토 타입 속성 도구 클래스 console.log (isprototype ( "gender", cat1)); // true function isprototype (prostring, obj) {if (prostring in obj) {if (! obj.hasownproperty (prostring)) {return true; } else {return false; }} else {return false; }}/*함수 isproperty (Object, Property) {// 프로토 타입 반환 속성이 있는지 확인하십시오! Object.hasOwnProperty (property) && (객체의 속성);}*/동적 프로토 타입 모드
// (이름, 연령, 성별) 당 프로토 타입 함수 초기화 {this.name = name; this.age = age; this.gender = 성별; // 프로토 타입을 초기화 할 때 한 번만 실행합니다. }}}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.