머리말
JavaScript를 사용하여 객체를 만드는 방법에는 여러 가지가 있습니다. 이제 4 가지를 나열하고 각 방법의 장단점을 나열하여 선택하고 사용할 수 있습니다. 살펴 보겠습니다.
공장 모델
함수 CreatePerson (이름, Age) {var obj = new Object (); obj.name = 이름; obj.age = 나이; 반환 obj; // 반품하십시오. 그렇지 않으면 정의되지 않은} var person1 = new CreatePerson ( 'Young', 18); console.log (person1.name + ':' + person1.age);장점 : 공장 패턴은 여러 유사한 개체를 만드는 문제를 해결할 수 있습니다.
단점 : 객체 인식 문제가 해결되지 않았습니다 (물체의 유형을 결정하는 방법)
생성자 모드
기능인 (이름, 나이) {this.name = 이름; this.age = age; } var person1 = 새로운 사람 ( 'Young', 18); console.log (person1.name + ':' + person1.age);그녀의 장단점에 대해 이야기하기 전에 먼저 자신의 이야기에 대해 이야기합시다.
생성자를 함수로 사용하십시오
기능인 (이름, 나이) {this.name = 이름; this.age = age; this.sayname = function () {reture this.name; }} // var person1 = new Person ( 'Young', 18); person1.sayname (); console.log (person1.name + ':' + person1.age); // 전화 ( '바람', 18); console.log (window.sayname ()); // var obj = new Object ()를 호출합니다. person.call (obj, 'bird', 100); console.log (obj.sayname ());생성자의 장점과 단점
장점 : 인스턴스를 특정 유형으로 식별 할 수 있습니다.
단점 : 각 방법은 각 인스턴스에서 다시 만들어야합니다. 물론 다음과 같이 변경할 수 있습니다.
기능인 (이름, 나이) {this.name = 이름; this.age = age; this.sayname = sayname; } function sayname () {return this.name; }대신 글로벌 기능을 호출하므로 캡슐화가 없습니다. . . 다음 프로토 타입 모드는이 단점을 보충 할 수 있습니다.
프로토 타입 모드
기능인 () {} person.prototype.name = 'Young'; person.prototype.age = 18; person.prototype.sayname = function () {return this.name; } var person1 = new Person (); console.log (person1.sayname ()); var person2 = 새로운 사람 (); console.log (person1.sayname ()); Alert (person1.sayname === person2.sayname); // person1 및 person2 동일한 속성 그룹의 동일한 sayName () 함수에 액세스프로토 타입에 저장된 값은 객체 인스턴스를 통해 액세스 할 수 있지만 인스턴스 객체를 통해 프로토 타입에 저장된 값을 다시 작성할 수 없습니다.
기능인 () {} person.prototype.name = 'Young'; person.prototype.age = 18; person.prototype.sayname = function () {return this.name; } var person1 = new Person (); var person2 = 새로운 사람 (); person1.name = '바람'; console.log (person1.sayname ()); // wind console.log (person2.sayname ()); // Young Alert (person1.sayname == person2.sayname); // true 우리가 person1.sayName 호출하면 두 번의 검색을 연속적으로 수행합니다. 파서는 먼저 인스턴스 Person1에 sayName 속성이 있는지 여부를 결정합니다. 있는 경우, 우리는 우리 자신의 속성을 호출 할 것입니다. 없으면 프로토 타입의 속성을 검색합니다.
기능인 () {} person.prototype.name = 'Young'; person.prototype.age = 18; person.prototype.sayname = function () {return this.name; } var person1 = new Person (); var person2 = 새로운 사람 (); person1.name = '바람'; console.log (person1.sayname ()); // wind console.log (person2.sayname ()); // Young Delete person1.name; console.log (person1.sayname ()); // Young Console.log (person2.sayname ()); // Young hasOwnPropertyType 방법을 사용하여 프로토 타입 또는 인스턴스에 속성이 있는지 여부를 감지하십시오. 이 메소드는 객체에서 상속되며 인스턴스에서는 사실이며 프로토 타입에서는 거짓입니다.
Object.keys() 메소드를 사용하여 개체의 인스턴스 속성을 열거합니다.
기능인 () {} person.prototype.name = 'Young'; person.prototype.age = 18; person.prototype.sayname = function () {return this.name; } var keys = object.keys (person.prototype); console.log (키); // [ "이름", "age", "sayname"]]]프로토 타입 모드의 장단점
장점 : 각 인스턴스의 모든 방법을 반복 할 필요가 없습니다.
단점 : 프로토 타입 모드 만 사용하는 사람은 거의 없습니다. . 질문 목록에 대해 자세히 설명합니다
function person () {} person.prototype = {생성자 : 사람, 이름 : 'Young', Age : 18, 친구 : [ 'big', 'pig'], sayname : function () {return this.name; }}; var p1 = 새로운 사람 (); var p2 = 새로운 사람 (); p1.friends.push ( 'mon'); console.log (p1.friends); // [ "big", "pig", "mon"] console.log (p2.friends); // [ "big", "pig", "mon"] 인스턴스는 일반적으로 고유 한 속성을 가지고 있기 때문에 우리는 여기에 직접 배치하기 때문에 여기에 Person.prototype 있으므로 P1의 수정으로 전체 인스턴스와 프로토 타입이 수정됩니다. 그런 다음 생성자 모드와 프로토 타입 모드의 조합을 사용할 수 있습니다.
생성자 모드와 프로토 타입 모드를 조합하여 사용하십시오
기능인 (이름, 나이) {this.name = 이름; this.age = age; this.friends = [ 'big', 'pig']; } person.prototype = {sayName : function () {return this.name; }}; var p1 = 새로운 사람 ( 'Young', 18); var p2 = 새로운 사람 ( '바람', 78); p1.friends.push ( 'raganya'); console.log (p1.friends); // [ "큰", "돼지", "돼지", "Raganya"] console.log (p2.friends); // [ "big", "pig"] console.log (p1.friends == p2.friends); // false console.log (p1.sayname == p2.sayname); // true이 패턴은 현재 가장 널리 사용되고 가장 잘 알려진 사용자 정의 유형을 생성하는 방법입니다. 참조 유형을 정의하는 데 사용되는 기본 모드입니다.
요약
위의 모든 것은 객체가 JavaScript에서 생성되는 방식을 분석하는 것입니다. 이 기사에서는 네 가지 방법과 장점과 단점이 요약되었습니다. 모든 사람이 JavaScript를 사용하는 법을 배우는 것이 도움이되기를 바랍니다.