Javascript中的Java面向对象概念

Java Object Oriented Concepts in Javascript

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

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

1
2
3
4
5
6
7
8
9
10
Class
instance of a class - object
Member variables
Getters
Setters
Abstract Class
Interface
Inheritance
Access Modifiers
Constructors

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


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

这个视频来自道格拉斯克罗克福德,一个帮助创建Javascript的人,非常适合新的Javascript程序员


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

试试这个简短的教程,了解通过闭包获取私有类方法和属性的基本方法。此外,本教程将向您展示如何实现经典继承。


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

Peter Michaux对此有一个很好的解释


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

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

这是伟大的John Resig的BRILLIANT互动教程:
http://ejohn.org/apps/learn/

以下是一些非常好的SO帖子,帮助我更好地理解JS:

如何在JavaScript中"正确"创建自定义对象?
JavaScript中的'new'关键字是什么?
为什么JavaScript原型设计?
为什么有必要设置原型构造函数?
使用Douglas Crockford的函数继承在Javascript中调用基本方法
帮助理解jQuery的jQuery.fn.init为什么在fn中使用init
jQuery.fn是什么意思?
为什么'这个'解决方案在JavaScript中如此特别?
电话和申请有什么区别?
动态函数调用(apply)
JavaScript数据格式化/漂亮的打印机
检查JavaScript对象中是否存在密钥?

这里有一些关于javascript的古怪和你不知道的东西的帖子:

是否有可能反映Javascript函数的参数?
函数参数
是什么 !! (不是)JavaScript中的运算符?
这个JavaScript / JQuery语法如何工作:( function(window,undefined){})(window)?
应该在JavaScript比较中使用哪个等于运算符(== vs ===)?
javascript中删除运算符的行为
var myArray = [],name;?
为什么null是一个对象,null和undefined之间有什么区别?
在JavaScript中检查null / undefined
感叹号在功能之前做了什么?


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

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

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

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

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

名称是它最相关的部分,它造成了很多混乱......


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


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


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

通过快速阅读Mozilla开发人员网络上JavaScript指南的"使用对象"部分,列出的前五个项目中的许多一般性问题都会散布在它们上面。 (类,类的实例 - 对象,成员变量,Getters,Setters)

我认为第二组项目在Douglas Crockford的网站上得到了很好的解释,他写了O'Reilly的书"Javascript:The Good parts"以及JSLint代码工具。 (抽象类,接口,继承,访问修饰符,构造函数)Crockford在一个页面中对Java和JavaScript进行了非常直接的类比,该页面描述了JavaScript不仅支持经典继承,还支持其他代码重用模式。