如何修复该类中调用函数时的非法调用
新的FullScreen().request();// Uncaught :非法调用
new FullScreen().cancel(); //Uncaught TypeError: Illegal invocation
new FullScreen().toggle(); //Uncaught TypeError: Illegal invocation
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();
}
}
发布于 2016-08-02 02:45:54
如果不进行测试,我最好的猜测是,您已经失去了文档的上下文。我建议将文档元素转移到您的方法中。
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();
}
}
发布于 2016-08-02 02:44:01
Javascript中的this
与上下文相关。当您调用this.request()
时,它会转换为this.requestFullscreen()
。当this.requestFullscreen = document.documentElement.requestFullscreen
,this.requestFullscreen() != document.documentElement.requestFullscreen()
.相反,this.requestFullscreen() == document.documentElement.requestFullscreen.call(this)
。换句话说,requestFullscreen
函数期望一个documentElement
作为this
指针,但是它会得到一个FullScreen
实例,从而导致非法调用异常。要修复错误,需要在构造函数中绑定上下文。
https://stackoverflow.com/questions/38710646
复制相似问题