이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!