2011-04-28 58 views
9

我在處理JavaScript的結構等方面遇到了一些麻煩。 我在PHP,ActionScript 3等語言中使用OOP技能是我認爲是平等的,但JS是缺乏這在我的學習中把我扔了很多。我應該如何看待構建我的JavaScript?

我對原型功能有一個模糊的理解,我在AS2中使用了一點 - 我相信這是我能夠得到的最接近的功能。目前,我正在鋪設類似我的代碼如下:

var slideshow = 
{ 
    property: value, 

    /** 
    * This is a method 
    */ 
    myMethod: function() 
    { 
     // do method things 
    } 
}; 

// ------ 
slideshow.property ++; 
slideshow.myMethod(); 

這一切工作正常,但它是無效我做的是這樣的能力:

var myslideshow1 = new Slideshow(); 
var myslideshow2 = new Slideshow(); 

myslideshow1.property = 10; 
myslideshow2.property = 16; 
  1. 我不是肯定如何去創建我創建的一個「對象」的兩個不同實例(在這種情況下,幻燈片)。
  2. 我找不到任何解釋原型功能的資源。

任何指針都是supoib。

回答

4

任何JavaScript功能,可以作爲一個類的構造函數,那麼試試這個:

function SlideShow(params) { 
    return { 
     property: value, 
     myMethod: function() { 
      //do method things 
     }; 
    }; 
}; 
var slideshow1 = new SlideShow(params); 
slideshow1.property = 10; 
//etc. 
+0

這很酷 - 這樣,而不是給一個對象我的價值觀,我將它們給一個函數相反 - 這聽起來正確嗎? – Marty 2011-04-28 01:41:53

+0

@marty,差不多。 '功能'是作爲一個班級,真的。 – 2011-04-28 01:44:38

+0

天才 - 謝謝。 – Marty 2011-04-28 01:46:35

2

我不會贊成APON使用原型方法添加到一個類,可能會有性能問題

以下是您可以使用的示例類結構。 JavaScript類沒有太大的不同功能。

function MyItem(){ 
    this.d = ''; 
    this.clear = function() { 
    this.d = ''; 
    } 
} 
var myItem = new MyItem() 
myItem.d = "test"; 
alert(myItem.d); 
myItem.clear(); 
alert(myItem.d) 

Some good reading here

+0

感謝您的鏈接! – Marty 2011-04-28 01:44:15

2

您應該避免使用new運算符,一切都是公開的。一個更好的辦法做你想做的事,並有私有變量和函數是做到以下幾點:

var slideshow = function() { 
    var self = {}; 
    var private_param = "hello"; 
    var private_func = function(say) { 
     alert(say); 
    }; 
    var method = function() { 
     private_func(private_param); 
    }; 
    var param = 500; 

    self.method = method; 
    self.param = param; 

    return self; 
    // return object, with the method func and param param publicly accessible 
    // private_param and private_func are not accessible to the outside 
}; 

var presentation = slideshow(); // new slideshow, you could edit to pass in init params 
presentation.method(); // hello 
+0

良好的信息 - 我是AS3私人的大用戶等,但所有額外的代碼使它似乎幾乎不值得。另外,缺少子類/超類使得它看起來像private關鍵字失去了它的有用性塊? – Marty 2011-04-28 03:06:19

+1

您可以輕鬆完成繼承。在開始時,將「self」設爲空對象,可以使用另一個創建另一個對象的函數。 – gkz 2011-04-28 03:10:59

+0

要記住的一件大事是,JavaScript沒有類。這並不意味着要上課。 JavaScript在許多方面不像Java或C++。我會閱讀JavaScript:好的部分。你可以在這裏找到它的pdf:http://eleventyone.done.hu/OReilly.JavaScript.The.Good.Parts.May.2008.pdf一旦你開始理解JavaScript,你會意識到它實際上是一個更多表達力和強大的語言比Java或C++。 – gkz 2011-04-28 03:12:56

相關問題