示例中的第一行是声明一个充当构造函数的函数。
var IsMobile = function () { this.anyMobile() };
当你调用 new IsMobile()
- 使用 IsMobile.prototype 创建一个新对象 OBJ 作为它的原型对象(继承 IsMobile.prototype 上定义的属性)
- 调用构造函数 IsMobile 并将 this 绑定到 OBJ
- 如果构造函数返回一个对象,则返回,否则返回OBJ
在您的情况下, anyMobile() 方法在构造函数代码中被调用,但返回值被忽略。
我建议您更改代码以不每次都创建新的 IsMobile 对象,如下所示:
IsMobile = function () {
var android = function() {
return navigator.userAgent.match(/Android/i);
},
blackBerry = function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS = function() {
return navigator.userAgent.match(/iPhone/i);
},
windows = function() {
return navigator.userAgent.match(/IEMobile/i);
},
anyMobile = function() {
if (android() || blackBerry() || iOS() || windows()) {
return true;
}
return false;
};
return anyMobile;
}();
console.log(IsMobile());
此外,由于 navigator 对象没有改变,您可以简单地保留返回的值,而不是每次都计算它。
IsMobile = function () {
var android = function() {
return navigator.userAgent.match(/Android/i);
},
blackBerry = function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS = function() {
return navigator.userAgent.match(/iPhone/i);
},
windows = function() {
return navigator.userAgent.match(/IEMobile/i);
},
anyMobile = function() {
if (android() || blackBerry() || iOS() || windows()) {
return true;
}
return false;
};
return anyMobile();
}();
console.log(IsMobile);