javascript – JS Proxying HTML5画布上下文
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – JS Proxying HTML5画布上下文,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2164字,纯文字阅读大概需要4分钟。
内容图文
我希望代理画布API,以便我可以测试抽象方法实际绘制到画布,但是我遇到问题,在代理后我得到一个错误:
‘strokeStyle’setter调用了一个没有实现CanvasRenderingContext2D接口的对象
此代码已简化但引发相同的错误:
/** !NB: This snippet will probably only run in Firefox */
var canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
canvas.style.backgroundColor = '#FF0000';
var ctx = canvas.getContext("2d");
var calls = [];
var handler = {
get( target, property, receiver ) {
if ( typeof ctx[property] === 'function' ){
return function( ...args ){
calls.push( { call: property, args: args } )
return ctx[property]( ...args );
};
}
return ctx[property];
}
};
try {
document.body.appendChild(canvas);
var proxy = new Proxy( ctx, handler );
proxy.scale( 1, 1 );
proxy.strokeStyle = '#000000';
canvas.getContext = function(){
return proxy;
};
}
catch( e ) {
document.getElementById('message').innerHTML = 'Error: ' + e.message;
}
<div id="message"></div>
有什么想法吗?
解决方法:
您可以通过在处理程序上定义set方法来修复此错误:
set(target, property, value, receiver) {
target[property] = value;
}
这个错误的原因可能看起来有点奇怪. CanvasRenderingContext2D实例没有自己的strokeStyle属性.相反,CanvasRenderingContext2DPrototype(每个CanvasRenderingContext2D实例的原型)都有一个访问器属性,其set / get组件将设置并获取实例的笔触样式值:
> ctx.hasOwnProperty("strokeStyle")
false
> Object.getOwnPropertyDescriptor(ctx.__proto__, "strokeStyle")
Object { get: strokeStyle(), set: strokeStyle(), enumerable: true, configurable: true }
(如果您有兴趣了解有关此模式的更多信息,请查看我在JSON.parse not erroring on cyclic objects上的答案.)
这里的问题是提供给CanvasRenderingContext2DPrototype.strokeStyle setter的是代理对象,而不是实际的ctx对象.也就是说,当我们仅在代理上设置属性时:
proxy.isAFake = true;
并在重新定义的setter中测试它:
Object.defineProperty(ctx.__proto__, "strokeStyle", {
set: function() {
console.log("strokeStyle setter called for proxy?", this.isAFake);
}
});
我们看到setter记录了仅代理属性:strokeStyle setter调用了代理?真正.
无论出于何种原因,CanvasRenderingContext2DPrototype.strokeStyle上的setter只接受真正的CanvasRenderingContext2D实例,而不是代理实例.
内容总结
以上是互联网集市为您收集整理的javascript – JS Proxying HTML5画布上下文全部内容,希望文章能够帮你解决javascript – JS Proxying HTML5画布上下文所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。