Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么原型中的javascript函数返回true或false_Javascript_Jquery - Fatal编程技术网

为什么原型中的javascript函数返回true或false

为什么原型中的javascript函数返回true或false,javascript,jquery,Javascript,Jquery,我有一个模块。我正在做的是,当我创建一个新的objectfunc实例时,模块内的函数会在构造函数内自动调用func()如果b为真则返回真,否则返回假。但是,它返回对象,即模块为什么? var Module = function () { this.func() }; Module.prototype = function () { var b = true; func = function() { if (b) { return tru

我有一个模块。我正在做的是,当我创建一个新的object
func
实例时,模块内的函数会在构造函数内自动调用
func()
如果b为真则返回真,否则返回假。但是,它返回对象,即
模块
为什么?

var Module = function () { this.func() };

Module.prototype = function () {
    var b = true;

    func = function() {
        if (b) {
            return true;
        }
        return false;
    };

    return {
        func: func
    }
}();

console.log(new Module());
当我停止调用构造函数中的
anyMobile()
函数,创建
IsMobile
的新实例,然后像下面那样调用
anyMobile()
时,它会返回true或false

var m = new Module();
m.func(); //Works
因此—

return {
        func: func
    }
任何要公开访问的移动设备都是一个包含函数的
对象

如果您改为执行
func:func()
(这将是一个返回布尔值的函数调用),它应该可以工作


查看解释得很好的概念

示例中的第一行是声明一个充当构造函数的函数

var IsMobile = function () { this.anyMobile() };
当你调用新的IsMobile()时

  • 创建一个新的对象OBJ,并将IsMobile.prototype作为其proto对象(以继承在IsMobile.prototype上定义的属性)
  • 调用构造函数IsMobile时将此绑定到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);
    

    不太明白,第一种情况下你怎么称呼IsMobile?你对找到的工作原始文件做了一些奇怪的事情,你可能想替换你的codecheck我的更新帖子