如何防止图书馆中的名称冲突?

时间:2019-01-23 11:28:11

标签: javascript html5 css3

我目前正在学习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 :(得分:1)

您可以通过多种方式封装/命名JS。我个人喜欢这个方案:

var myns = {

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

据我所知,它没有任何限制,您可以使用漂亮的短名称:-)只需从外部调用即可:

myns.receive(this);

答案 1 :(得分:0)

您应该将alerts(...)重命名为其他名称。尝试命名它,以便当另一个程序员阅读它时,他/她直接通过 just 知道该函数的名称,该函数可能会做什么(当然,这并不总是完全可能的,但是尝试)。当前名称并没有真正描述它的作用,除此之外,还给您带来了冲突。您可以将其命名为adjustBackgroundColorAccordingToTimesetBackgroundForCurrentTime。当然,有些其他东西也可能对您有用:)

答案 2 :(得分:0)

请勿为您的库命名,而是使用更长的名称。 然后,您可以像noConflict一样爆炸jQuery.noConflict之类的函数来爆炸您的库。

例如: lib的全名是MyAwesomeAlerts,并且您想简称alerts。 在代码的结尾,您应该检测您的短名称是否在当前范围内,如果不存在,请执行语句window.alerts = MyAwesomeAlerts;否则,什么都不做,最终用户可以调用var awesomeAlerts = MyAwesomeAlerts.noConflict();对其进行命名。

在函数noConflict中,如下所示:

```
MyAwesomeAlerts.noConflict = function() {
    return MyAwesomeAlerts
}
```