首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Uncaught :非法调用javascript

Uncaught :非法调用javascript
EN

Stack Overflow用户
提问于 2016-08-02 01:52:54
回答 2查看 1.9K关注 0票数 1

如何修复该类中调用函数时的非法调用

新的FullScreen().request();// Uncaught :非法调用

代码语言:javascript
运行
复制
new FullScreen().cancel(); //Uncaught TypeError: Illegal invocation 
代码语言:javascript
运行
复制
new FullScreen().toggle(); //Uncaught TypeError: Illegal invocation 
代码语言:javascript
运行
复制
import validator from "Validator";

export default class FullScreen {
    constructor() {
        if (validator.checkValueType(Modernizr.fullscreen, "BOOLEAN") && Modernizr.fullscreen) {
            this.requestFullscreen = document.documentElement.requestFullscreen || document.documentElement.msRequestFullscreen ||
                document.documentElement.mozRequestFullScreen || document.documentElement.webkitRequestFullscreen;
            this.cancelFullScreen = document.cancelFullScreen || document.msCancelFullScreen || document.mozRequestFullScreen || document.webkitRequestFullscreen;
        } else {
            throw new UserException("Fullscreen not supported in this browser");
        }

    }

    request() {
        this.requestFullscreen();
    }

    cancel() {
        this.cancelFullScreen();
    }

    isFullScreen() {
        return document.isFullScreen || document.msIsFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen;
    }

    toggle() {
        if (this.isFullScreen()) this.cancel();
        else this.request();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-02 02:45:54

如果不进行测试,我最好的猜测是,您已经失去了文档的上下文。我建议将文档元素转移到您的方法中。

代码语言:javascript
运行
复制
import validator from "Validator";

export default class FullScreen {
    constructor() {
        if (!validator.checkValueType(Modernizr.fullscreen, "BOOLEAN") && Modernizr.fullscreen) {
            throw new UserException("Fullscreen not supported in this browser");
        }
    }

    request() {
        document.documentElement.requestFullscreen || document.documentElement.msRequestFullscreen ||
                document.documentElement.mozRequestFullScreen || document.documentElement.webkitRequestFullscreen;
    }

    cancel() {
        document.cancelFullScreen || document.msCancelFullScreen || document.mozRequestFullScreen || document.webkitRequestFullscreen;
    }

    isFullScreen() {
        return document.isFullScreen || document.msIsFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen;
    }

    toggle() {
        if (this.isFullScreen()) this.cancel();
        else this.request();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-08-02 02:44:01

Javascript中的this与上下文相关。当您调用this.request()时,它会转换为this.requestFullscreen()。当this.requestFullscreen = document.documentElement.requestFullscreenthis.requestFullscreen() != document.documentElement.requestFullscreen().相反,this.requestFullscreen() == document.documentElement.requestFullscreen.call(this)。换句话说,requestFullscreen函数期望一个documentElement作为this指针,但是它会得到一个FullScreen实例,从而导致非法调用异常。要修复错误,需要在构造函数中绑定上下文。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38710646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档