Maison  >  Article  >  interface Web  >  js connaissances de base (méthodes publiques, méthodes privées, méthodes privilégiées)_Connaissances de base

js connaissances de base (méthodes publiques, méthodes privées, méthodes privilégiées)_Connaissances de base

WBOY
WBOYoriginal
2016-05-16 15:33:361315parcourir

Bien que le sujet abordé dans cet article soit très basique et considéré comme une astuce par de nombreuses personnes, il s'agit d'un sujet complet dans les connaissances de base de JavaScript. Cela impliquera une connaissance de l' encapsulation des attributs d'objet, des prototypes, des constructeurs, des fermetures et de l'exécution immédiate des expressions .

Méthodes publiques
Les méthodes publiques sont des méthodes accessibles et appelées en externe.

// 在对象中
var Restaurant = {
 name: 'McDonald',
 // 公有方法
 getName: function() {
 return this.name;
 }
}

// 在构造函数中
function Person(name, age) {
 this.name = name;
 this.age = age;
 // 公有方法
 this.getName = function() {
 return this.name;
 }
}

// 在原型中
Person.prototype.getAge = function() {
 return this.age;
}

Méthodes privées et Méthodes privilégiées
Ces deux méthodes sont généralement discutées ensemble car la méthode privilégiée que nous définissons fait référence à la méthode publique qui a accès aux propriétés privées internes et aux méthodes privées, tandis que la méthode privée fait référence à la méthode externe invisible et inaccessible.

Il existe généralement deux façons de définir un objet, l'une consiste à utiliser l'instanciation d'objet ou l'expression d'objet, et l'autre consiste à utiliser un constructeur. De même, les formes de définition des méthodes privées et des méthodes privilégiées diffèrent également de différentes manières.

dans l'objet
Ici, nous utilisons l'expression d'objet pour créer un objet et ajouter des propriétés et des méthodes, puis l'appeler directement de manière statique. Les données privées de l'objet sont placées dans une expression d'exécution immédiate de fonction anonyme (IIFE). Cela signifie que cette fonction n'existe qu'au moment où elle est appelée et est détruite immédiatement après son exécution.

La manière de créer des données privées dans un objet est appelée le modèle de module en mode objet (en référence au mode de création d'objets). Son format de base est le suivant :

var yourObject = (function() {

 // 私有属性和方法

 return {
 // 公有方法和属性
 }
}) ();

En mode module, le littéral d'objet renvoyé contient uniquement des propriétés et des méthodes qui peuvent être exposées.

var Restaurant = (function() {
 // 私有属性
 var _total = 10;

 // 私有方法
 var _buyFood = function() {
 _total--;
 };
 var _getTotal = function() {
 return _total;
 }

 return {
 name: 'McDonald',
 getTotal: _getTotal,
 buy: _buyFood
 }
}) ();

Restaurant.buy();
console.log(Restaurant.name); // 'McDonald'
console.log(Restaurant.getTotal()); // 9

Notez que nous utilisons des fermetures pour utiliser indirectement des variables privées internes et initialiser le nom du restaurant.

En constructeur
Lors de la création de méthodes privées dans le modèle de module présenté ci-dessus, il n'y a pas de différence essentielle entre les méthodes publiques et les méthodes privilégiées. La raison en est que ce concept est défini lors de l'utilisation de constructeurs pour créer des données privées.

Il est pratique de définir des propriétés et des méthodes privées dans le constructeur. Nous n'avons pas besoin d'utiliser de fermetures et pouvons initialiser les données lors de l'appel.

function Restaurant(name) {
 // 私有属性
 var _total = 10;

 // 公有属性
 this.name = name;

 // 私有方法
 function _buyFood() {
 _total--;
 }

 // 特权方法
 this.buy = function() {
 _buyFood();
 }

 this.getTotal = function() {
 return _total;
 }
}

// 公有方法, 注意这里不能访问私有成员_total
Restaurant.prototype.getName = function() {
 console.log(_total); // Uncaught ReferenceError: _total is not defined
 return this.name;
}

var McDonald = new Restaurant('McDonald');
console.log(McDonald.getName()); // 'McDonald'
McDonald.buy();
console.log(McDonald.getTotal()); // 9

Deux en un, de manière plus flexible
En utilisant le modèle de module, nous pouvons l'appeler plusieurs fois et il sera détruit après chaque exécution. Certaines données initialisées peuvent être transmises à l'aide de la méthode constructeur, mais les propriétés des membres privés ne sont pas accessibles dans les méthodes publiques. S'il existe de nombreuses méthodes publiques qui doivent accéder aux données privées, nous les écrirons toutes dans des méthodes privilégiées et enfin les amènerons à. chaque instance. De nombreuses méthodes inutiles. Par conséquent, combiner les deux peut se compléter, et la méthode de combinaison est également très simple

var Restaurant = (function() {
 // 私有属性
 var _total = 10;

 // 私有方法
 function _buyFood() {
 _total--;
 }

 // 构造函数
 function restaurant(name) {
 this.name = name;
 this.getTotal = function() {
 return _total;
 }
 }

 restaurant.prototype.buy = function() {
 console.log(_total); // 10
 _buyFood();
 }

 restaurant.prototype.getName = function() {
 return this.name;
 }

 return restaurant;
}) ();

var McDonald = new Restaurant('McDonald');
console.log(McDonald.getName()); // 'McDonald'
McDonald.buy();
console.log(McDonald.getTotal()); // 9

Ce qui précède représente l'intégralité du contenu de cet article. L'éditeur n'en a résumé qu'une petite partie. Il y a encore de nombreux points de connaissances qui n'ont pas été mentionnés. Vous pouvez explorer et étudier par vous-même. utile aux débutants.

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