Javascript,获取全局变量属性
Javascript, getting global variable property
我要做的是根据屏幕尺寸将全局变量点类型设置为"移动"或"桌面"。
var userScreen = {}
if (screen is small){
userScreen.type === 'mobile'
}
else {
userScreen.type === 'desktop'
}
一切都在同一个文件中工作,但我在让userScreen.type在另一个JavaScript文件中可用时遇到了问题。
屏幕尺寸.js:
$(document).ready(function(){
var userScreen = {};
var resizeTimer;
$(window).on('resize load', function(e) {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
var windowWidth = $(window).width();
if ($('body').height() < $(document).height()) {
var windowWidth = windowWidth + 15;
}
if (windowWidth < 768){
userScreen.type = 'mobile';
}
else{
userScreen.type = 'desktop';
}
}, 250);
});
另一个 js 文件
$(document).ready(function(userScreen){
console.log(userScreen.type);
});
控制台日志"用户屏幕类型"结果:
function( obj ) {
if ( obj == null ) {
return obj + "";
}
// Support: Android<4.0, iOS<6 (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ t…
加载顺序:
- 屏幕尺寸.js
- 另一个 js 文件.js
谢谢
编辑
想对大家的回应说声谢谢。最终答案
所以我创建了一个 IIFE,只需设置 window.userScreen
对象
获取用户屏幕.js
window.userScreen = {};
function getScreenSize(){
var windowWidth = $(window).width();
if ($('body').height() < $(document).height()) {
var windowWidth = windowWidth + 15;
}
if (windowWidth < 768){
userScreen.type = 'mobile';
}
else{
userScreen.type = 'desktop';
}
console.log(userScreen.type);
}
(function(){
getScreenSize();
}());
这使得变量像我想要的那样全局可用,并消除了提出的超时问题。一切都按预期工作。
再次感谢
声明显式全局的最佳方法是直接在 window
对象上创建它。因此,对于您的情况,请创建如下:
window.userScreen = {};
当您想访问它时,您可以再次通过以下方式进行访问 window.userScreen
.许多人可能会反对这种用法,因为全局变量确实有气味,但这是一种明显向另一个开发人员传达您的全局是有意全局的方式。
我主张使用更好的模式,如 CommonJS 模块,但这确实需要更多的设置和知识。但是,如果您好奇,如果您想保持代码干净和分隔,这是一个很好的方向。
在加载任何 js 文件之前,您可以在脚本标记中声明 html 中的变量。这样:
<script type='text/javascript' >
var userScreen = {};
</script>
把它放在加载javascript文件的脚本标签之前,它们都应该能够使用该变量。另外,请记住不要再次重新声明该变量;从屏幕大小内取出var userScreen = {};
.js
首先在 document.ready 外部声明它(作为全局变量)。其次,在设置之前,你会得到userScreen.type(参见超时250)。我建议采用不同的方法,从您的描述来看,我认为超时没有任何意义。因此:
屏幕尺寸.js
function getSize(){
if ($('body').height() < $(document).height()) {
var windowWidth = windowWidth + 15;
}
if (windowWidth < 768){
return 'mobile';
}
else{
return 'desktop';
}
}
另一个 js 文件.js:
$(document).ready(function(){
console.log(getSize());
});
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- 如何从jQuery设置控制器或全局变量的属性
- 脚本标记中的全局变量使用's源属性
- nodejs中的Javascript全局变量和属性-全局属性有时会被删除
- 全局变量只是“窗口”对象的属性吗?
- 节点.js全局变量属性被清除
- 在 JavaScript 中访问原始全局变量和属性
- Javascript,获取全局变量属性
- 基于对象属性修改全局变量
- 将 React 模板放在一个全局变量的属性中
- 我应该如何处理Resharpers检查器提示'使用可能未分配的属性或全局变量'
- 按字符串选择全局变量,包括子属性
- 使用属性来改变javascript插件中的全局变量
- 全局变量的属性范围
- 用jquery保存全局变量img属性位置