关于HTMLCanvasElement.getContext()方法命名及MDN相关文档表述矛盾的技术疑问
关于HTMLCanvasElement.getContext()方法命名及MDN相关文档表述矛盾的技术疑问
嘿,这个问题问得特别到位,我刚接触Canvas API的时候也被这两个点困惑过,咱们拆开来看:
一、为什么是getContext()而不是setContext()?
其实这个命名的核心在于方法的核心行为和返回值:
- 当你第一次调用
canvas.getContext('2d')这类语句时,它确实会帮你创建并初始化对应类型的渲染上下文,但这只是它的“副作用”,它的核心目的是把这个上下文对象返回给你——毕竟你调用它是为了拿到这个对象去做绘制操作,而不是单纯给Canvas设置一个参数。 - 更关键的是,如果你后续再调用同一个Canvas的
getContext()(传相同的上下文类型),它不会重新创建新的上下文,而是直接返回已经存在的那个实例。
所以从语义上来说,这个方法的核心是“获取(或创建后获取)”可用的渲染上下文,而不是“设置”选项,叫getContext()其实更贴合它的实际用途。
二、MDN文档的两段表述是不是矛盾?
完全不矛盾,只是表述的角度不同:
“
“在给定的Canvas元素上,无法获取不同的绘图上下文对象。”
这段话则是从实际实例限制角度说的:一旦你为某个Canvas创建了某一种类型的上下文(比如先调用了getContext('2d')),之后再尝试获取另一种类型的上下文(比如getContext('webgl'))就会返回null——同一个Canvas实例只能同时存在一种类型的上下文对象,不能切换或共存多种。
打个比方:就像一个工作台可以兼容画笔、3D雕刻刀不同工具,但你一旦选了画笔开始工作,就不能同时用雕刻刀,之后再拿工具也只能拿到你之前选的那支画笔。
备注:内容来源于stack exchange,提问作者Coding_with_a_Tractor
相关产品推荐
相关产品推荐

