画布对象文字:未捕获类型错误:无法调用未定义的方法“getContext”
Canvas object literal: Uncaught TypeError: Cannot call method 'getContext' of undefined
为什么使用对象文字(如下所示)会产生此错误?
<canvas id="game" width="568" height="320"></canvas>
var GAME = {
settings: {
canvas: document.getElementById('game'),
context: this.canvas.getContext('2d'),
gameWidth: this.context.width,
gameHeight: this.context.height
}
};
在您的代码中,this
是全局上下文,即window
。不能在对象文本的属性中引用对象本身。
一个解决方案:
var GAME = {
settings: {
canvas: document.getElementById('game');
}
};
GAME.settings.context = GAME.settings.canvas.getContext('2d');
GAME.settings.gameWidth = GAME.settings.context.width;
GAME.settings.gameHeight = GAME.settings.context.height;
您可以使用IIFE作为更干净的代码:
var GAME = (function(){
var s = {};
s.canvas = document.getElementById('game');
s.context = s.canvas.getContext('2d');
s.gameWidth = s.context.width;
s.gameHeight = s.context.height;
return { settings : s}
})();
相关文章:
- PhoneGap无法调用未定义的方法loadurl
- Javascript/jQuery - “无法调用未定义的方法'push'”,而它是定义的
- 无法调用未定义的方法,但警报(方法)仍在工作
- 不能调用未定义节点.js的方法“forEach”
- 无法调用未定义的方法“addMethod”
- 未捕获的类型错误:无法调用未定义的方法“then”
- JavaScript uncatch TypeError:无法在第二次迭代时调用未定义的方法“拼接”
- 我收到此错误:无法在 String.toJadenCase 调用未定义的方法“替换”
- 主干不能调用未定义/未加载数据的方法“toJSON”
- 获取类型错误:无法在 angularjs 控制器中调用未定义的方法 'then'
- 致命错误:调用未定义的函数 FusionCharts()
- 不能调用未定义的 GetJson 的方法“toLowerCase”
- TypeError:无法调用未定义的 Angularjs 的方法 'then'
- backbonejs:不能调用未定义的方法“绑定”
- 变量不会传递给 Ajax 调用:未定义的变量
- 问.js节点承诺.“套接字”上缺少错误处理程序.类型错误:无法调用未定义的方法“then”
- Parse.com -- Cloud Code/JS -- “无法调用未定义的方法'set'”
- “未捕获的类型错误:无法调用未定义的方法'indexOf'”时选择jqgrid行
- 致命错误:未捕获错误:调用未定义的函数loginRelocate() Javascript
- 尝试使用 angularjs 拦截器时出错 未捕获 获取 无法调用未定义的方法“推送”