我有OOP的背景。我開始用JavaScript工作了很多。隨着項目的發展,維護它變得越來越困難。在Java中,我應用OOP原則來控制事物。我應該怎麼處理JavaScript,我應該研究哪些旨在保持JavaScript應用程序的控制權?OOP vs JavaScript
回答
您也可以將OOP原則應用於Javascript開發。 Javascript使用原型繼承,但這是一個實現細節。這些概念仍然是一樣的。大多數您熟悉的概念都有直接類似於javascript的概念。
其他嘗試和真正的方法也同樣適用:
1)保持乾爽 - 不要重複自己。重複的代碼總是邪惡的。
2)單獨問題 - 使用MVC或MVVM模式保持代碼清潔,只做1件事。
3)測試 - 當我聽到「難以維護」時,我的大腦將其轉化爲缺乏測試。您當然可以爲JavaScript項目編寫單元測試。
4)代碼審查 - 代碼審查可以是拒絕重複的代碼的好方法,代碼是不正確精雕細琢,未格式化,等....
......好吧,夠近了。然而,這種區別很重要。這絕對值得長期關注。 – 2012-03-21 20:12:09
你是什麼意思'夠接近'?你不同意嗎? – hvgotcodes 2012-03-21 20:28:21
原型與子類不是同義的;領域和功能如何被「採用」有一些差異。例如,共享原型的多個對象字面上共享原型字段,並且更改它可以更改所有子對象的屬性。 – 2012-03-21 20:31:58
在JavaScript中,函數是對象; Mozilla Developer Network,McKoss,SitePoint,和JavaScript Kit進一步解釋。
實例JavaScript對象
function myObj() {
this.myMethod = function() {
alert('hello');
}
}
var demo_obj = new myObj();
demo_obj.myMethod();
模式來控制住
- 這裏列出的模式是特別爲JavaScript的東西。
- Use a Script Loader。
- Use a JS Framework。
- Lint your JavaScript. - 工具可用於在您的桌面上在Rhino或節點上運行此工具。
- Minify your JS.
- 這裏列出的模式是典型的面嚮對象語言,而不是 特別的JavaScript。
- 幹 - 不要重複自己。
- Observer(Pub/Sub)模式。
反模式,以讓事情失去了控制
- 的污染命名空間
- 使用eval()
- 原型侵害的對象物體
- 聯腳本的標籤。
- 使用文件撰寫
這是如何回答這個問題的? – delnan 2012-03-21 20:12:02
的當我在相同的情況下,我開始看「怎麼做等」。它以http://dojotoolkit.org/和http://jquery.com結尾,我正在研究他們如何實現小部件/插件,以便其他人可以擴展該框架。
這是你如何在javascript中定義對象和方法。
function SomeObj() {
this.someMethod = function() {
alert('boo');
}
}
var o_obj = new SomeObj();
o_obj.someMethod(); //alerts "boo"
希望它有幫助。
您還可以使用原型創建靜態函數。
this.prototype.someMethod = function() {
alert('boo');
}
請在'someObj'中使用*第一個大寫字母*。它是JavaScript中的標準命名轉換。它表明應該用'new'來創建對象的實例。比較'var now = new Date();'。 – Oleg 2012-05-12 17:25:09
的確如此。對象名稱甚至轉爲藍色,現在它們以大寫字母開頭。 – c0d3Junk13 2012-05-13 15:43:38
我建議您另外使用http://www.jslint.com/來驗證代碼。你。你會看到''構造函數名'someObj'應該在你以前的代碼中以大寫字母'消息開頭。另外你會發現你應該包括';' 'this.someMethod = function(){alert('boo'); }因爲它是賦值語句。 – Oleg 2012-05-13 16:08:27
另一種在javascript中定義簡單對象和方法的方法(不需要new
)。
function creaeSomeObj() {
var that = {};
that.someMethod = function() {
alert('boo');
}
return that;
}
var o_obj = createSomeObj();
o_obj.someMethod(); //alerts "boo"
此模式不支持繼承,但多次就足夠了。
爲什麼「vs」? JavaScript支持面向對象的編程,但不是以傳統的基於類的方式,例如在例如Java的。
JavaScript的OOP工作方式通常稱爲「原型繼承」,或者更具體地說是「委託原型繼承」。這可以歸結爲:「如果你正在尋找一個對象的屬性‘富’,你不能找到它,然後嘗試尋找對象的原型而不是內部‘富’」。也就是說,該物業的查找是委託到對象的原型(我們說對象從原型繼承屬性)。
原型繼承的工作方式有幾點含義。例如:
- JavaScript中的對象是「動態」的,因爲它們只是一堆名稱 - 值對。新的屬性可以在運行時添加和刪除,因此它們比典型的類對象中的「靜態」要少得多。
- 方式delegative原型繼承的作品(「如果你不能找到原型這裏,再看看這裏代替」)意味着它比傳統的面向對象多簡單。例如,從純粹的原型角度來看,您不需要構造函數。 「方法」是指發生在連接到原型(這意味着它們可以作爲所有繼承對象的屬性)只是普通的功能。
有贊成的和反對的既原型和經典的繼承,但要記住,他們是不同是很重要的。現在
,JavaScript是由Java和其他古典語言啓發某種意義上,等於是他們決定把語法「類像」,使其更容易使用的類人上手。在這方面我不會詳細說明。它在很大程度上已經在其他地方被記錄。
一些有趣的帖子:
- hughfdjackson's introduction to JavaScript OOP - 短多到了點,
- Sorella's longer "Understanding Javascript OOP" - 而深入和非常完整資源。
Pluralsight有一個關於此主題的課程:Structuring JavaScript Code,可能會提供一些見解。注意兩點:1,我沒有走過的歷程坐 - 但是內容很精彩,我一直印象深刻,我已經採取了其他Pluralsight課程,2。它不是免費的(但可能是值得的小$如果它可以節省您在B/C路上的時間,使您擁有更好的代碼結構)。不,我不爲Pluralsight工作。
除了這個線程提到的js框架,也可以看看Knockoutjs - 在這裏learnknockoutjs.com偉大的教程。 Knockout是MVVM的焦點。注意,存在計算器comparing Backbone to Knockout了很好的討論,並Pluralsight也有使用淘汰賽,我都看過,做推薦的課程。
- 1. OOP&Forms,JavaScript VS PHP
- 2. PHP OOP vs Inline
- 3. OOP Javascript vs Java(或其他,比如PHP)
- 4. 算法VS OOP
- 5. mysqli,OOP vs Procedural
- 6. PHP包含vs OOP
- 7. this.constructor.SomeVarible vs this.SomeVarible in OOP JS
- 8. Javascript OOP框架
- 9. Javascript OOP問題
- 10. PhoneGap和Javascript OOP
- 11. Javascript OOP&Coffe
- 12. Javascript OOP,函數
- 13. JavaScript OOP錯誤
- 14. Javascript OOP繼承
- 15. 調試OOP javascript
- 16. 的Javascript OOP和
- 17. Javascript字面與功能oop
- 18. javascript oop多個類
- 19. JavaScript如何做OOP?
- 20. JavaScript的結構OOP
- 21. javascript/jquery oop學習
- 22. JavaScript的OOP問題
- 23. 的JavaScript OOP方法
- 24. 問題OOP的Javascript
- 25. 屬性vs PHP屬性數組OOP
- 26. 抽象類VS枚舉(一般OOP)
- 27. WCF對象設計 - OOP vs SOA
- 28. OOP echo $ this-> title = $ part VS echo $ par
- 29. OOP vs運行時的程序
- 30. OOP:私有方法VS新類
看看Backbone.js的,也許CoffeeScript的。他們一起工作得很好。 – asawyer 2012-03-21 20:09:37
JavaScript是面向對象的。 – Gumbo 2012-03-21 20:09:58
檢查出[helephant(http://helephant.com/2008/08/17/how-javascript-objects-work/)的一些OO的思想。的 – jbabey 2012-03-21 20:13:40