Maison  >  Article  >  interface Web  >  Comment utiliser les exportations et module.exports

Comment utiliser les exportations et module.exports

php中世界最好的语言
php中世界最好的语言original
2018-04-17 15:44:217509parcourir

Cette fois, je vais vous montrer comment utiliser exports et module.exports, et quelles sont les précautions lors de l'utilisation de exports et module.exports. Ce qui suit est un cas pratique, jetons un coup d'œil.

1. exports est l' objet auxiliaire de module.exports Lorsque exports fournit une API vers le monde extérieur, vous devez utiliser return pour renvoyer l'objet exports

. 2. module.exports peut également fournir directement une API

Référence : https://github.com/seajs/seajs/issues/242

exporte l'objet

exports est un objet utilisé pour fournir des interfaces de module avec le monde extérieur.

define(function(require, exports) {
 // 对外提供 foo 属性
 exports.foo = 'bar';
 // 对外提供 doSomething 方法
 exports.doSomething = function() {};
});

En plus d'ajouter des membres à l'objet exports, vous pouvez également utiliser return pour fournir directement des interfaces avec le monde extérieur.

define(function(require) {
 // 通过 return 直接提供接口
 return {
  foo: 'bar',
  doSomething: function() {}
 };
});

Si l'instruction return est le seul code du module, elle peut également être simplifiée en :

define({
 foo: 'bar',
 doSomething: function() {}
});

Le format ci-dessus est particulièrement adapté à la définition de modules JSONP.

Remarque spéciale : la manière d'écrire suivante est fausse !

define(function(require, exports) {
 // 错误用法!!!
 exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});

La bonne façon de l'écrire est d'utiliser return ou d'attribuer une valeur à module.exports :

define(function(require, exports, module) {
 // 正确写法
 module.exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});

Astuce : exports n'est qu'une référence à module.exports. Lorsque les exportations sont réaffectées à l’intérieur de l’usine, la valeur de module.exports ne sera pas modifiée. Par conséquent, l’attribution d’une valeur aux exportations n’est pas valide et ne peut pas être utilisée pour modifier l’interface du module.

Objet module.exports

L'interface fournie par le module actuel avec le monde extérieur.

Le paramètre exports passé au constructeur factory est une référence à l'objet module.exports. Fournir des interfaces uniquement via le paramètre exports ne peut parfois pas répondre à tous les besoins des développeurs. Par exemple, lorsque l'interface d'un module est une instance d'une certaine classe, elle doit être implémentée via module.exports :

define(function(require, exports, module) {
 // exports 是 module.exports 的一个引用
 console.log(module.exports === exports); // true
 // 重新给 module.exports 赋值
 module.exports = new SomeClass();
 // exports 不再等于 module.exports
 console.log(module.exports === exports); // false
});

Remarque : L'affectation à module.exports doit être exécutée de manière synchrone et ne peut pas être placée dans la fonction de rappel . Les éléments suivants ne fonctionneront pas :

// x.jsdefine(function(require, exports, module) {
 // 错误用法
 setTimeout(function() {
  module.exports = { a: "hello" };
 }, 0);
});

Dans y.js, le x.js ci-dessus s'appelle :

// y.jsdefine(function(require, exports, module) {
 var x = require('./x');
 // 无法立刻得到模块 x 的属性 a
 console.log(x.a); // undefined
});

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur. le site PHP chinois !

Lecture recommandée :

Problèmes de détection des modifications de tableau dans vue

JS affiche une barre de progression lors du téléchargement de fichiers

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