如果在声明变量时在JavaScript中构建函数类型类,那么最好使用
var this.variableName = variableName
var this.x = x
或者这样做会更好。
this.x
我尝试使用var并在Google debuger中出错。为什么会出现这种情况,或者属性与在函数“object”中设置的变量不同。
代码:
function Circle(x,y,r) {
this.x = x;
this.y = y;
this.r = r;
// I've added the drawing code to the actual circle
// they can draw themselves.
this.draw = function(context){
context.beginPath();
context.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
context.closePath();
context.fill();
}
}
答案 0 :(得分:0)
当一个对象被声明时,它已经被声明了,所以做这样的事情不仅是非法的,而且是多余的。
// DON'T DO THIS!!!
var this.a = 'a'; // NO!!!!!!!!!
相反,只需声明你的对象,然后只需将东西附加到该对象,因为它已经初始化了
var obj = {};
obj.a = 'a';
obj.b = 'b';
在对象中声明函数时可能遇到的问题是范围问题以及this
在Javascript中的工作原理。
为此,您有几种选择:
声明一个that
变量,然后可以在函数中使用该变量:
function Circle(x,y,r) {
this.x = x;
this.y = y;
this.r = r;
// I've added the drawing code to the actual circle
// they can draw themselves.
var that = this;
this.draw = function(context){
// this refers to the global object (window)
// that refers to your Circle Object
context.beginPath();
context.arc(that.x, that.y, that.r, 0, Math.PI*2, true);
context.closePath();
context.fill();
}
}
如果您使用的是支持ECMAScript 5的浏览器(不是IE8),则可以将该功能绑定到Circle
对象。
function Circle(x,y,r) {
this.x = x;
this.y = y;
this.r = r;
// I've added the drawing code to the actual circle
// they can draw themselves.
this.draw = function(context){
context.beginPath();
context.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
context.closePath();
context.fill();
}.bind(this);
}
如果您想支持IE8并使用.bind
,您可以使用underscore.js并使用_.bind
功能。
function Circle(x,y,r) {
this.x = x;
this.y = y;
this.r = r;
// I've added the drawing code to the actual circle
// they can draw themselves.
this.draw = _.bind(function(context){
context.beginPath();
context.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
context.closePath();
context.fill();
}, this);
}