>웹 프론트엔드 >JS 튜토리얼 >객체를 생성하는 7가지 JS 객체 지향 방법

객체를 생성하는 7가지 JS 객체 지향 방법

零到壹度
零到壹度원래의
2018-03-22 16:31:061351검색

이 글은 주로 7가지 JS 객체지향 객체 생성에 대해 자세히 설명하고 있으며, 주로 코드 형태로 여러분께 공유하고 있습니다.

1. 팩토리 패턴
ECMAScript에서는 클래스를 생성할 수 없다는 점을 고려하여 개발자는 특정 인터페이스로 객체 생성의 세부 사항을 캡슐화하는 함수를 발명했습니다.

function createPerson(name,age,job){
    var o = new Object();  
      o.name = name;  
      o.age = age;
      o.job = job;  
      o.sayName = function(){  
            alert(this.name);
    }; 
    return o;
}
var person1 = createPerson("Joy",29,"Software Engineer");
var person2 = createPerson("Greg",27,"Doctor");

2. 프로토타입 패턴

function Person(name,age,job){  
  this.name = name;  
   this.age = age;  
     this.job = job; 
        this.sayName = function(){   
             alert(this.name);
    }
}
var person1 = new Person("Joy",29,"Software Engineer");
var person2 = new Person("Greg",27,"Doctor");
alert(person1.sayName === person2.sayName); //false.每个Person实例都会创建一个功能相同的Function实例

3. 생성된 함수에는 프로토타입 속성이 있으며, 이 속성은 객체를 가리키는 포인터이며, 이 객체의 목적은 특정 유형에서 공유할 수 있는 속성과 메서드를 포함하는 것입니다. 프로토타입 객체를 사용하면 모든 객체 인스턴스가 포함된 속성과 메서드를 공유할 수 있다는 점입니다.

function Person(){}
    Person.prototype.name = "Joy";
    Person.prototype.age = 29;
    Person.prototype.job = "Software Engineer";
    Person.prototype..sayName = function(){ 
  alert(this.name)
};
  var person1 = new Person();

4. 생성자 패턴과 프로토타입 패턴을 조합하여 사용합니다.

 function Person(name,age,job){  
    this.name = name;   
     this.age = age;    
     this.job = job;
}
   Person.prototype = { 
      sayName:function(){     
         alert(this.name)
    }
};
   var person1 = new Person("Joy",29,"Software Engineer");
   var person2 = new Person("Greg",27,"Doctor");
   alert(person1.sayName === person2.sayName); //true

5. 동적 프로토타입 패턴

 function Person(name,age,job){   
    this.name = name;    
    this.age = age;    
    this.job = job;    
    if(typeof this.sayName != 'function'){  
          console.log(this.name); //在下了person1、person2两个实例下只会输出Joy,不会输出Greg   
          Person.prototype.sayName = function(){ //这里只在sayName()方法不存在的情况下,才会将它添加到原型中。这段代码只会在初次调用构造函数是才会执行。            alert(this.name)
        }
    }
}
  var person1 = new Person("Joy",29,"Software Engineer");var person2 = new Person("Greg",27,"Doctor");


6 , Parasite Pattern

   function Person(name,age,job){   
    var o = new Object();    
    o.name = name;    
    o.age = age;    
    o.job = job;    
    o.sayName = function(){        
        alert(this.name);
    };
        return o;
}
var person1 = new Person("Joy",27,"Software Engineer");

Parasite Pattern이 반환한 객체는 생성자나 생성자의 프로토타입 속성과 관계가 없습니다. 즉, 생성자가 반환한 객체는 생성자 외부에서 생성된 객체와 다르지 않습니다. . 이러한 이유로 다른 모드를 사용할 수 있는 경우에는 이 모드를 사용하지 않는 것이 좋습니다

7. 안전한 생성자 모드
소위 안전하다는 것은 공용 속성이 없으며 해당 메서드가 이 객체를 참조하지 않는다는 것을 의미합니다. 안전한 생성자는 기생 생성자와 유사한 패턴을 따르지만 두 가지 차이점이 있습니다. 첫째, 새로 생성된 객체 인스턴스 메서드는 이를 대신 참조하지 않으며 생성자를 호출하는 데 new 연산자가 사용되지 않습니다.

function Person(name,age,job){   
 var o = new Object();    
   o.sayName = function(){     
      alert(name)
    }; 
       return o;
}
var person1 = Person("Joy",29,"Software Engineer");

이런 식으로 person1 변수는 안정적인 개체이며 sayName() 메서드를 제외하고 해당 데이터 멤버에 액세스할 수 있는 다른 방법이 없습니다. 다른 코드에서 이 개체에 메서드나 데이터 멤버를 추가하더라도 생성자에 전달된 원본 데이터에 액세스할 수 있는 다른 방법은 없습니다.


위 내용은 객체를 생성하는 7가지 JS 객체 지향 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.