2012-02-15 56 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/的好作品已被证明对我有巨大的帮助。