我目前正在学习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>
答案 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 知道该函数的名称,该函数可能会做什么(当然,这并不总是完全可能的,但是尝试)。当前名称并没有真正描述它的作用,除此之外,还给您带来了冲突。您可以将其命名为adjustBackgroundColorAccordingToTime
或setBackgroundForCurrentTime
。当然,有些其他东西也可能对您有用:)
答案 2 :(得分:0)
请勿为您的库命名,而是使用更长的名称。
然后,您可以像noConflict
一样爆炸jQuery.noConflict
之类的函数来爆炸您的库。
例如:
lib的全名是MyAwesomeAlerts
,并且您想简称alerts
。
在代码的结尾,您应该检测您的短名称是否在当前范围内,如果不存在,请执行语句window.alerts = MyAwesomeAlerts
;否则,什么都不做,最终用户可以调用var awesomeAlerts = MyAwesomeAlerts.noConflict();
对其进行命名。
在函数noConflict
中,如下所示:
```
MyAwesomeAlerts.noConflict = function() {
return MyAwesomeAlerts
}
```