2012-02-15 11 views
9

私は長い間Javaを使用してきましたが、しばらくの間、私はGWT(Google Web Toolkit)を使用してWeb開発を行っていました。その美しさは、私がJavaオブジェクト指向のコンストラクトを持っていて、GWTにどのように変換されるのか心配しないであろうということです。 Javascriptに関する私の知識は十分でしたが、私はそれで重いウェブ開発をすることができませんでした。 その後、私はJavascriptの深い徹底的な理解を得なければならないと決めました。これは真のジェットコースターでした。私が何かを得ると思うところで、何かが来て、間違っていることを私に証明します。誤解されました。JavascriptのJavaオブジェクト指向の概念

何stackoverflowのよりも私の懸念を表明するためのより良い場所:私は、次のJava概念の一部にJavascriptのと同等であるものにいくつかのリソースとポインタのために物乞いしています:

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

私は、これらの概念のいくつかを知っていますしかし、私が言ったように - 私はいくつかの概念的な困難があると信じています。誰かが本当のjavascriptの達人がここでこのようなコンセプトを正確に突き止めようとしていると指摘できたら、私はとてもうれしいでしょう。

+1

それは良い質問ですが、私はその範囲が非常に広いので、閉じることに投票しています。 – Perception

+3

事実、これらの概念の半分はJSには存在しません。部分的にプロトタイプのOOPが原因で、一部はダイナミックなタイピングが原因です。個々のコンセプトを翻訳しようとすることは遠くないでしょう。 – delnan

+2

私はこのことを私たちに説明したくないので、私は閉会に反対します。彼は良い資源へのリンクしか望んでいない。 –

答えて

3

私はあなたと同じ探求をしてきましたが、私はそこを掻き集めて知識を取得しなければなりませんでした。

これらすべての主題について、stackoverflow上にはたくさんの優れた投稿があります。MDN jqueryのような人気のあるライブラリのソースを参照することをおすすめします。

How to "properly" create a custom object in JavaScript?
What is the 'new' keyword in JavaScript?:ここ http://ejohn.org/apps/learn/


は私がより良いJSを理解する助けたいくつかの非常に良いSOの記事です:これは偉大なジョンResig氏によるBRILLIANTインタラクティブなチュートリアルです。このソースビューアhttp://james.padolsey.com/jquery/

を参照してください。
Why is JavaScript prototyping? Why is it necessary to set the prototype constructor?
ここ
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とあなたがprolly知らなかったもののquirkynessに関するいくつかの記事です:

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)と[Prototype-based](https://en.wikipedia .org/wiki/Prototype-based_programming)の機能をサポートしています。 – ingyhere

3

まあ、JavaScriptで親指の基本的なルールは、それはあなたがほとんどやらせますということです何でもアクセス修飾子はありません。 JavaScriptはあまり防げないので、抽象クラスのようなものは意味をなさない。常にインスタンス化することができます。

Objectから派生した似たような振る舞いがあり、プロトタイプを使用して動作のようなコンストラクタを得ることができます。 http://www.javascriptkit.com/javatutors/proto.shtml

メンバー変数は類似していますが、型なしであり、関数とデータを含むこともできます。

JavaScriptでは、これらのことをシミュレートするために個人的な規律と強力なコード規約が必要ですが、その言語はあなたを少し助けません。それはあなたの方法で取得しないことを意味する超flexableですが、それはまた、あなた自身も吊るすロープの多くを提供します。

全く異なる言語としてアプローチすることをお勧めします。基本的にはさまざまな点で異なっているため、Javaに関連させないでください。

名前のものが多くの混乱を作成し、それをすべての最も関連部分です...

5

Douglas Crockfordは非常によく、これらのオブジェクト指向の機能を模倣する方法について説明します。彼の本JavaScript: The Good Partsは誰もが読んで、JavaScriptのしばしば混乱する機能を最大限に活用する方法を説明するべきだと思うものです。

クロージャを使用してプライベートクラスのメソッドとプロパティを取得する基本的な方法については、this brief tutorialを試してみてください。また、this tutorialは古典的な継承を達成する方法を示します。

1

私は明示的にSを含め、これらの質問のほとんどにお答えしますカップルの参照と考えることができますJavaScriptは、強く型付けされた静的言語としてのJavaに対して、疎結合型の動的言語です。私はこれがあなたが求めている直接の類推のタイプだと感じています。

最初の5つの項目からの多くの一般的な質問には、Mozilla Developer NetworkにあるJavaScript Guideの "Working with Objects"セクションを素早く読んで、それらに軽い色が散っています。

私が思うに、2番目のグループは、O'Reillyの本「Javascript:The Good」を書いたDouglas Crockfordのthis siteです。 JSLintコードツールと同様に、「部品」も含まれています。 (抽象クラ​​ス、インタフェース、継承、アクセス修飾子、コンストラクタ)クロックフォードは、どのようにしてJavaScript supports not only classical inheritance, but other code reuse patterns as wellを記述するページで、JavaとJavaScriptとの間の直接的な類推を行います。

3

JavaScriptは良いニュースがあるしかし、しかし、それはECMAの良い人々はオブジェクト指向の概念を持って問題に取り組んでいることを、クラスベースのオブジェクト指向のJavaのような言語やC# の概念の一部が欠けている、純粋なオブジェクト指向言語でありますJavaScript

Peter Michaux has a good explanation on this

+0

リンクありがとうございました... – oneiros

1

に抽象化、クラス、名前空間、相続、財産...のように私には、JavaScriptに入るしようとしたとき、あなたが持っていたものと非常に似た衝撃がありました。 JavascriptのDouglas Crockfordと彼のサイトhttp://crockford.com/の良い部分が私のために大いに役立っていることが証明されました。