2012-02-15 58 views
9

我一直在使用Java很長一段時間,並且我花了很長一段時間使用GWT(Google Web Toolkit)進行Web開發。它的美妙之處在於我擁有面向Java對象的構造,不用擔心如何將其轉換爲GWT - 讓Google處理它。我對Javascript的瞭解足夠了,但是沒有達到我可以用它進行繁重的Web開發的程度。 後來我決定我必須對Javascript有一個更深入,更透徹的理解,這是一個真正的過山車 - 就在我認爲我得到某些東西的時候,某些事情會發生,並證明我錯了 - 我只是誤解。Javascript中的Java面向對象的概念

什麼更好的地方來表達我的關注比計算器:我乞求一些資源和指針,這將是一個Javascript相當於下面的一些Java概念:

Class 
instance of a class - object 
Member variables 
Getters 
Setters 
Abstract Class 
Interface 
Inheritance 
Access Modifiers 
Constructors 

我知道其中的一些概念,但正如我所說 - 我相信我有一些概念上的困難。如果有人可以指出一位真正的JavaScript大師試圖在這裏指出這些非常概念,我會非常高興。

+1

這是一個很好的問題,但我投票結束,因爲它的範圍非常廣泛。 – Perception 2012-02-15 15:26:30

+3

事情是,這些概念中有一半不存在於JS中,部分原因在於原型OOP,部分原因是由於動態分類。你不會試圖翻譯個別的概念。 – delnan 2012-02-15 15:28:01

+2

我反對結案,因爲他不希望我們解釋這件事。他只希望鏈接到好的資源。 – 2012-02-15 15:28:40

回答

3

我一直在和你一樣的追求,但我不得不在整個地方刮擦和取得知識。

對於所有這些主題,有很多優秀的帖子覆蓋整個stackoverflow,然後有MDN我也建議窺視像jQuery的流行圖書館的來源。看到這個源代碼查看器http://james.padolsey.com/jquery/

這是一個輝煌的互動教程由偉大的約翰Resig的:
http://ejohn.org/apps/learn/

這裏有一些很不錯的SO職位,幫助我更好地瞭解JS:

How to "properly" create a custom object in JavaScript?
What is the 'new' keyword in JavaScript?
Why is JavaScript prototyping? Why is it necessary to set the prototype constructor?
Call base method in Javascript using Douglas Crockford's functional inheritance
Help understanding jQuery's jQuery.fn.init Why is init in fn
What does jQuery.fn mean?
Why 'this' resolution is so special in JavaScript?
What is the difference between call and apply?
Dynamic function call (apply)
JavaScript data formatting/pretty printer
Checking if a key exists in a JavaScript object?

以下是有關的JavaScript中quirkyness和東西有的帖子你prolly不知道:

Is it possible to reflect the arguments of a Javascript function?
function arguments
What is the !! (not not) operator in JavaScript?
How does this JavaScript/JQuery Syntax work: (function(window, undefined) { })(window)?
Which equals operator (== vs ===) should be used in JavaScript comparisons? Behavior of delete operator in javascript
var myArray =[], name;?
Why is null an object and what's the difference between null and undefined?
Checking for null/undefined in JavaScript
What does the exclamation mark do before the function?

6

我想你主要需要理解Javascript是一種純粹的OOP語言,但它沒有類!對於Java程序員來說這是相當震撼的,並且需要一段時間才能讓你的頭部繞過它,但是是一個相當強大的範例。

這裏這部影片是由道格拉斯·克羅克福德,誰幫一個人創造的Javascript,輝煌的新的JavaScript程序員

http://www.youtube.com/watch?v=v2ifWcnQs6M

+0

JavaScript不是*純粹的OOP語言,但它提供[基於對象](https://en.wikipedia.org/wiki/Object-based_language)和[基於原型](https://en.wikipedia .org/wiki/Prototype-based_programming)功能。 – ingyhere 2016-12-29 03:01:24

3

那麼,在JavaScript拇指的基本規則是,它可以讓你做幾乎任何東西。沒有訪問修飾符。由於JavaScript並沒有太大的阻止,所以抽象類就沒有意義。你可以隨時實例化它。

類似於行爲的類似行爲來自對象,你可以使用原型獲得像構造函數一樣的行爲。 http://www.javascriptkit.com/javatutors/proto.shtml

成員變量類似但未定義,並且還可以包含函數以及數據。

在JavaScript中,你需要個人紀律和強大的代碼慣例來模擬這些事情,但是這種語言對你有點幫助。這是超靈活的,這意味着它不會妨礙你,但它也給你很多繩子來吊死你自己。

最好把它作爲一種完全不同的語言。不要試圖將它與Java聯繫起來,因爲它在很多方面有着根本性的不同。

的名字就是它的所有這些造成了許多混亂的最相關的部分...

5

Douglas Crockford介紹瞭如何模仿這些面向對象特性非常好。他的書JavaScript: The Good Parts是我認爲每個人都應該閱讀的書,並解釋瞭如何充分利用JavaScript經常令人困惑的功能。

嘗試this brief tutorial他的基本方法是通過關閉獲得私人類方法和屬性。另外,this tutorial將告訴你如何實現經典的繼承。

1

我能想到的一對夫婦的引用,將回答大部分問題,包括明確的S指出JavaScript是一種鬆散類型的動態語言,而Java是一種強類型的靜態語言。我覺得這是你正在尋找的直接類比的類型。從列出的第一個五個品

很多一般性的問題將與JavaScript Guide的在Mozilla Developer Network的「Working with Objects」部分的快速閱讀後,他們散落光。 (類,對象,成員變量,Getters,Setters的實例)

我認爲的第二組項目在來自Douglas Crockford的this site中有很好的解釋,他寫了O'Reilly的書「Javascript:The Good零件「以及JSLint代碼工具。 (抽象類,接口,繼承,訪問修飾符,構造函數)Crockford在描述如何使用Java和JavaScript的頁面中做出了非常直接的類比JavaScript supports not only classical inheritance, but other code reuse patterns as well

3

JavaScript是純面向對象的語言,但是它缺乏一些的或者基於類的OOP語言如Java C# 的概念,不過好消息是,ECMA的好鄉親都對此事的合作,把面向對象的概念像抽象類,命名空間,繼承,財產......爲JavaScript

Peter Michaux has a good explanation on this

+0

非常感謝您的鏈接... – oneiros 2012-02-22 12:54:53

1

我有一個非常類似的衝擊試圖去到JavaScript時,您已經有了一個。 Javascript Douglas Crockford和他的網站http://crockford.com/的好作品已被證明對我有巨大的幫助。