有许多方法可以在JavaScript中调用函数,但由于某些原因,这对我不起作用。有人可以告诉我到底我做错了什么吗?
我尝试过原型设计(例如gameObject.prototype = {};),但由于某种原因这种方式无效。现在我只是想在函数中直接分配方法,而这甚至都不起作用。
这张照片出了什么问题?
function gameObject(){
this.o={};
this.setimage=function(i){
this.o.img=i;
};
this.setDimensions=function(w,h){
this.o.width=w;
this.o.height=h;
};
this.setPosition=function(x,y){
this.o.x=x;
this.o.y=y;
};
this.create=function(){
var el=document.createElement("div");
el.className="object "+this.o.cname;
el.style.width=width*this.o.w;
e.style.height=height*this.o.h;
el.style.position="absolute";
el.style.top=height*this.o.y;
el.style.left=width*this.o.x;
map.appendChild(el);
};
this.setClass=function(c){
this.o.cname=c;
};
return this.o;
}
我想要的是这样的:
var d=new gameObject(); d.setClass("class"); d.setDimensions(0.8,0.15);
等。等等。
我仍然是面向对象编程的新手,所以我甚至不知道我的词汇是否正确。我正在尝试做什么以及正确的做法是什么?
答案 0 :(得分:5)
您不应该从此构造函数返回任何内容。
删除此
返回this.o;
Demo here。
如果从构造函数返回值,则创建的对象将具有返回值的类型。
Demo here。
如果您看到此演示d.a
,则返回4
表示new gameObject
返回this.o
值,而不是this
gameObject()
。
如果你想使用原型
function gameObject(){
this.o={};
}
gameObject.prototype = {
setimage:function(i){
this.o.img=i;
},
setDimensions:function(w,h){
this.o.width=w;
this.o.height=h;
},
setPosition:function(x,y){
this.o.x=x;
this.o.y=y;
},
create:function(){
var el=document.createElement("div");
el.className="object "+this.o.cname;
el.style.width=width*this.o.w;
e.style.height=height*this.o.h;
el.style.position="absolute";
el.style.top=height*this.o.y;
el.style.left=width*this.o.x;
map.appendChild(el);
},
setClass:function(c){
this.o.cname=c;
}
}
答案 1 :(得分:1)
在javascript中,创建实例方法的最佳方法是使用原型。这段代码应该有效:
function gameObject(){
this.o={};
};
gameObject.prototype = {
setimage: function(i){
this.o.img=i;
},
setDimensions: function(w,h){
this.o.width=w;
this.o.height=h;
},
setPosition: function(x,y){
this.o.x=x;
this.o.y=y;
},
create: function(){
var el=document.createElement("div");
el.className="object "+this.o.cname;
el.style.width=width*this.o.w;
e.style.height=height*this.o.h;
el.style.position="absolute";
el.style.top=height*this.o.y;
el.style.left=width*this.o.x;
map.appendChild(el);
},
setClass: function(c){
this.o.cname=c;
}
};
你之前如何做的问题是返回一些东西 - 你不需要这样做。