Javascript中的Java面向对象概念

时间:2012-02-15 15:23:42

标签: java javascript gwt

我已经使用Java很长一段时间了,很长一段时间我一直在使用GWT(Google Web Toolkit)进行Web开发。它的美妙之处在于我拥有了面向Java对象的构造,并且不会担心它如何被转换为GWT - 让Google来处理它。我对Javascript的了解已经足够,但并不是因为我可以用它进行大量的Web开发。 后来我决定我必须对Javascript有更深入和更彻底的了解,这是一个真正的过山车 - 只是在我认为我得到了一些东西,有些东西来证明我错了 - 我只是被误解了。

有什么比stackoverflow更能表达我的关注的地方:我正在寻找一些资源和指向Javascript等同于以下一些Java概念的内容:

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

我知道其中一些概念,但正如我所说 - 我相信我有一些概念上的困难。如果有人可以指出一个真正的javascript大师试图在这里查明这些概念,我将非常高兴。

8 个答案:

答案 0 :(得分:6)

我认为你主要需要了解Javascript是一种纯粹的OOP语言,但是它没有类!...对于Java程序员而言,这是一个非常震撼,需要一段时间来了解它,但这是一个非常强大的范例。

此视频来自Douglas Crockford,一位帮助创建Javascript的人,非常适合新的Javascript程序员

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

答案 1 :(得分:5)

Douglas Crockford解释了如何很好地模仿这些面向对象的功能。他的书JavaScript: The Good Parts是我认为每个人都应该阅读的书,并解释了如何充分利用JavaScript常常令人困惑的功能。

尝试使用他的this brief tutorial作为通过闭包获取私有类方法和属性的基本方法。此外,this tutorial将向您展示如何实现经典继承。

答案 2 :(得分:3)

嗯,JavaScript中的基本经验法则是它可以让你做任何事情。没有访问修饰符。由于JavaScript不会阻止很多,所以像抽象类这样的东西就没有意义了。你总是可以实例化它。

模糊类行为来自于对象,您可以使用原型获得类似行为的构造函数。 http://www.javascriptkit.com/javatutors/proto.shtml

成员变量类似但无类型,也可以包含函数和数据。

在JavaScript中,您需要个人纪律和强大的代码约定来模拟这些内容,但语言对您没有帮助。它是超灵活的,这意味着它不会妨碍你,但它也为你提供了足够的绳索。

最好将它作为一种完全不同的语言来对待它。不要试图将它与Java联系起来,因为它在很多方面都有根本的不同。

名称是最相关的部分,这些都会造成很多混乱......

答案 3 :(得分:3)

我和你一直在同一个任务,但我不得不在整个地方刮取和获取知识。

所有这些主题的堆栈溢出都有很多优秀的帖子,然后有MDN我还建议窥视像jquery这样的流行库的来源。查看此来源查看器http://james.padolsey.com/jquery/

这是伟大的John Resig的BRILLIANT互动教程:
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的古怪性以及你们不知道的东西的帖子:

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?

答案 4 :(得分:3)

JavaScript是纯粹的OO语言,但它缺少基于类的OOP语言的一些概念,如Java或C# 然而,好消息是,ECMA的优秀人员正致力于将OO概念(如抽象,类,命名空间,继承,属性......)纳入JavaScript

Peter Michaux has a good explanation on this

答案 5 :(得分:1)

我可以想到几个能够回答大多数这些问题的参考文献,包括明确说明JavaScript是一种松散类型的动态语言,而Java则是一种强类型的静态语言。我觉得这是你正在寻求的直接类比。

列出的前五个项目中的许多一般性问题都会散布在他们身上,并快速阅读Working with ObjectsJavaScript Guide的“Mozilla Developer Network”部分。 (类,类的实例 - 对象,成员变量,Getters,Setters)

我认为第二组项目在Douglas Crockford的this site中得到了很好的解释,他写了O'Reilly的书“Javascript:The Good parts”以及JSLint代码工具。 (抽象类,接口,继承,访问修饰符,构造函数)Crockford在描述JavaScript supports not only classical inheritance, but other code reuse patterns as well的方式的页面中对Java和JavaScript进行了非常直接的类比。

答案 6 :(得分:1)

有关JavaScript变量作用域的一些信息,请参阅本文。 它解释了为对象原型创建公共变量,受保护变量和私有变量的基础知识。 http://www.anzaan.com/2009/05/javascript-variable-scope-private-protected-and-public/

答案 7 :(得分:1)

我对尝试进入Javascript时遇到的情况非常相似。 Javascript道格拉斯·克罗克福德和他的网站http://crockford.com/的好部分已被证明对我有很大的帮助。