Javascript 属性赋值(香草)
Javascript property assignment (vanilla)
对于一个小项目,我想创建一个基于引擎检测浏览器的小库:
var engine = {
opera: function(){
var ua = navigator.userAgent.toLowerCase(),
version = ua.match(/opera['/'s]('d+'.'d+)/);
if (version){
return parseFloat(version[1]);
}
},
webkit: function(){
var ua = navigator.userAgent.toLowerCase(),
version = ua.match(/applewebkit'/(['d.]+)/);
if (version && !engine.opera()){
return parseFloat(version[1]);
}
},
gecko: function(){
var ua = navigator.userAgent.toLowerCase(),
version = ua.match(/rv':(['w'.]+).'s(gecko)/);
if (version && !engine.opera()){
return parseFloat(version[1]);
}
},
ie: function(){
var ua = navigator.userAgent.toLowerCase(),
version = ua.match(/msie ('d+'.'d+)/);
if (version && !engine.opera()){
return parseFloat(version[1]);
}
},
touch: function(){
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/android|ipod|iphone|ipad|iemobile|bb['d]'d|blackberry|playbook|silk|touch|mobile/)){
return true;
}
else {
return false;
}
}
};
致电:engine.webkit()<534.3
检查这是否是基于 webkit 的浏览器,旧于 Android 4 等中使用的浏览器。
如您所见,我正在使用属性赋值来封装引擎检测,而不会污染全局命名空间。
但是 - 对于每个引擎,我正在创建变量 ua,这显然没有被重用,因此不是最佳实践。
有人可以告诉我如何在引擎对象中仅定义一次 var ua 的方法吗?
谢谢
只需添加属性并与this
一起使用:
ua: navigator.userAgent.toLowerCase(),
opera: function {
this.ua // The reusable
将其放在 IIFE 中。
var engine = (function() {
var ua = navigator.userAgent.toLowerCase();
return {
opera: function() { ... },
// etc.
};
})();
IIFE 的工作原理是创建一个新的函数作用域,该作用域将变量排除在全局作用域之外,然后立即执行该函数。 ua
有效地成为私有变量。它是 IIFE 的局部变量,但可以被 IIFE 中定义的任何函数引用。
相关文章:
- Javascript变量赋值|
- 无法为打字稿字典赋值
- Javascript-根据赋值顺序,按键合并对象数组
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何通过json对象数组为嵌套对象赋值
- 赋值后的回调函数
- ||(OR)运算符如何在赋值中工作
- 可以使用属性赋值实现多个函数
- 将ECMAScript 6析构函数赋值(ES2015)重构为旧版本的javascript
- 如何在javascript中为全局变量赋值
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- JavaScript:在嵌套循环中为数组赋值
- 未设置变量的赋值| jQuery的作用是什么
- Javascript赋值运算符的奇怪行为
- onchange赋值的Javascript位置
- 我可以在javascript中的回调函数中为变量赋值吗
- 逻辑(JSint友好)等效于while循环中的此赋值
- 为数组元素的属性赋值将设置所有其他类似元素的属性
- 错误-应为赋值或函数调用,但实际看到的却是表达式
- Javascript 属性赋值(香草)