2013-01-22 91 views
1

有許多方法可以在JavaScript中調用函數,但由於某些原因,這對我來說不起作用。有人能告訴我我做錯了什麼嗎?將方法添加到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); 

等等,等等等等

我還是相當新的面向對象編程,所以我甚至不知道如果我的詞彙是正確的。我想要做什麼以及準確地做到這一點的正確方法是什麼?

+3

你爲什麼從構造函數返回'this.o'?我會放棄這一點,並且你的代碼應該可以工作。 –

+0

順便說一句,你期望使用多少個遊戲對象? –

+0

考慮到我想允許用戶創建他們自己的遊戲內物體,這是一個可變的數量。 –

回答

5

你不應該從這個構造函數返回任何東西。

刪除該內容

return 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; 
    } 
} 

Demo here

+0

這不應該是這樣一個通用的陳述; *在這種情況下*不應該從構造函數返回:) –

+0

@Jack,是的,你是對的 –

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; 
    } 
}; 

您之前如何做的問題是返回一些內容 - 您不需要這樣做。

相關問題