Как я могу предотвратить конфликт имен в моей библиотеке? - PullRequest
0 голосов
/ 23 января 2019

В настоящее время я изучаю JS и работаю над своей собственной первой библиотекой, однако проблема, с которой я столкнулся, заключается в следующем:

Когда кто-то еще использует мою библиотеку, он / она получит конфликт имен при использовании«оповещения» в там код.

Какой метод является лучшим или как мне лучше решить эту проблему?

Заранее спасибо !!

body {
  font-family: sans-serif;
  background: white;
  font-size: 150px;
  color: #333;
} 
jQuery(document).ready(function( $ ){
 function alerts (alert1, alert2, alert3, alert4) { 	//function calling all alerts
		 var hours = new Date().getHours(); 	//get time by hours

	 if (alert1 == undefined) {			// if statement that fills the alert if undefined 
		 alert1=0;
	 }

	 if (alert2 == undefined) {
		 alert2=12;
	 }

	 if (alert3 == undefined) {
		 alert3=17;
	 }

	 if (alert4 == undefined) {
		 alert4=24;
	 }

 if (hours >= alert1 && hours < alert2) {		//check if the time is between alert1 and alert 2, if than so execute
		 document.body.style.backgroundColor = "blue";
 } else if (hours >= alert2 && hours < alert3) {
				 document.body.style.backgroundColor = "red";
 } else if (hours >= alert3 && hours < alert4) {
				 document.body.style.backgroundColor = "green";
 } else {

 }

 }
 alerts(a, b, c, d); 
 }); 							//end Jquery 
<html lang="en" >

<head>
  <meta charset="UTF-8">
  <title>timeofday</title>

  <link rel="stylesheet" href="css/style.css">

</head>

<body>

<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> <!-- Includes Jquery -->
<script>
var a = 0;
var b = 17;
var c = 18;
var d = 24;
  </script>
<script src="js/index.js">

</script> <!-- Includes the script for background change -->

</body>

</html>

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Не называйте свою библиотеку так, как обычно, и делайте имя длиннее.Затем вы можете взорвать такую ​​функцию, как noConflict, чтобы взорвать вашу библиотеку, точно так же, как jQuery.noConflict.

Например: полное имя вашей библиотеки MyAwesomeAlerts, и вы хотели бы сделатькороткое имя alerts.В конце вашего кода вы должны определить, существует ли ваше короткое имя в текущей области, выполнить оператор window.alerts = MyAwesomeAlerts, если он не существует;в противном случае ничего не делать, и конечные пользователи могут вызывать var awesomeAlerts = MyAwesomeAlerts.noConflict();, чтобы назвать его.

В функции noConflict, вот так:

```
MyAwesomeAlerts.noConflict = function() {
    return MyAwesomeAlerts
}
```
0 голосов
/ 23 января 2019

Вы можете инкапсулировать / пространство имен вашего JS различными способами.Мне лично нравится эта схема:

var myns = {

    send: function () {
        // your code
    },
    receive: function (sender) {
        // your code
    },
    save: function () {
        // your code
    }
};

Насколько я знаю, она не имеет ограничений, и вы можете использовать хорошие короткие имена :-) просто позвоните, например, извне:

myns.receive(this);
0 голосов
/ 23 января 2019

Вы должны переименовать alerts(...) во что-то другое. Попробуйте назвать это так, чтобы, когда другой программист прочитал его, он / она непосредственно знал просто имя функции, что функция, вероятно, будет делать (конечно, это не всегда возможно, но попробуйте к). Нынешнее название на самом деле не описывает то, что оно делает, кроме того, что дает вам конфликты. Что-то, что вы могли бы сделать, это назвать его adjustBackgroundColorAccordingToTime или setBackgroundForCurrentTime. Что-то еще может работать для вас тоже, конечно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...