Maison  >  Article  >  interface Web  >  Sept méthodes orientées objet JS pour créer des objets

Sept méthodes orientées objet JS pour créer des objets

零到壹度
零到壹度original
2018-03-22 16:31:061302parcourir

Cet article explique principalement en détail la création de sept objets orientés objet JS. Il est principalement partagé avec vous sous forme de code.

1. Modèle d'usine
Considérant que les classes ne peuvent pas être créées dans ECMAScript, les développeurs ont inventé une fonction pour encapsuler les détails de la création d'objets avec une interface spécifique :

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. Modèle de constructeur

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. Modèle de prototype
Chaque fonction créée a un attribut de prototype, qui est un pointeur pointant vers un objet, et cet objet a pour but de contenir propriétés et méthodes qui peuvent être partagées par un type spécifique. L'avantage d'utiliser un objet prototype est que toutes les instances d'objet peuvent partager les propriétés et les méthodes qu'il contient

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. Utilisez le modèle constructeur et le modèle prototype en combinaison

 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. Mode prototype dynamique

 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. Mode parasite

   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");


L'objet renvoyé par le mode parasite n'a aucune relation avec le constructeur ou les propriétés du prototype du constructeur, c'est-à-dire que l'objet renvoyé par le constructeur n'est pas différent de l'objet créé en dehors du constructeur. Pour cette raison, il est recommandé de ne pas utiliser ce mode lorsque d'autres modes peuvent être utilisés

7. Mode constructeur sécurisé
Le soi-disant coffre-fort signifie qu'il n'y a pas d'attributs publics, et ses méthodes ne le font pas. référencer cet objet. Les constructeurs sûrs suivent un modèle similaire aux constructeurs parasites, mais il existe deux différences : premièrement, la méthode d'instance d'objet nouvellement créée ne fait pas référence à cela, l'opérateur new n'est pas utilisé pour appeler le constructeur ;

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

De cette façon, la variable person1 est un objet sûr, et il n'y a pas d'autre moyen d'accéder à ses données membres que la méthode sayName(). Même si un autre code ajoute des méthodes ou des données membres à cet objet, il n'existe aucun autre moyen d'accéder aux données d'origine transmises au constructeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn