关于oop:我如何在JavaScript中模拟“类”?

How can I emulate “classes” in JavaScript? (with or without a third-party library)

如何在javascript中模拟类(和名称空间)?

我需要创建一个JavaScript库,并且在该语言方面的经验有限。我一直认为它对类有本地支持,但它与Java无关。似乎JavaScript中的所有内容实际上都是一个函数。

到目前为止,我发现它是一种动态的弱类型语言,这有很大的意义,但对于那些习惯于使用强类型语言并使用编译器来发现我们的错误的人来说,这有点不太现实。

我主要从事C语言和Java语言工作,希望有类似的语法,这样我们的其他C语言开发人员就必须熟悉它。

我有以下类型的代码可以工作,但我想知道其他开发人员会对它做些什么。备选方案是什么?有更好的方法吗?有没有更易读的方法?

我知道,当我应该接受JavaScript这一事实时,我想要的是类似于C或Java的东西,但我的目标是通过使其他开发者更熟悉和直观,从而减轻其他开发者的学习曲线。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//Perform the namespace setup (this will actually be done with checking
//in real life so we don't overwrite definitions, but this is kept short
//for the code sample).
var DoctaJonez = new function();
DoctaJonez.Namespace1 = new function();

/**
 * Class description.
 */

DoctaJonez.Namespace1.SomeClass = function()
{
    /**
     * Public functions listed at the top to act like a"header".
     */

    this.publicFunction = privateFunction;

    /**
     * Private variables next.
     */

    var privateVariable;

    /**
     * Finally private functions.
     */

    function privateFunction()
    {

    }
}

//Create an instance of the class
var myClass = new DoctaJonez.SomeClass();

//Do some stuff with the instance
myClass.publicFunction();

  • 定义JavaScript类的3种方法
  • 面向对象的JavaScript
  • JavaScript教程:函数与类

对于Javascript中OOP的一般理解,您不能比阅读Douglas Crockford做得更好:

  • javascript中的经典继承
  • javascript中的原型继承
  • javascript中的私有成员

对于Dojo粉丝(以及一般技术),Neil Roberts有很好的文章:

  • 按数字显示颜色:dojo.delegate
  • javascript元类编程

纯香草Dojo。DeCurrar()可能是主流图书馆中最先进的OOP基础。我有偏见,但不要相信我的话。下面是有关如何使用它的示例。

一个普通的香草物体:

[cc lang="javascript"]//让我们定义一个超简单类(不继承任何东西)。dojo.declare("人",空,{//类级属性答:42,//类级对象属性姓名:第一个:"福特",最后一个:"预取


如果你(和你的团队)被用于Java,但需要为网站制作一些JavaScript,也许你应该考虑谷歌& NebWeb&No.To工具包(GWT)。它允许您使用Java转换JavaScript代码,JavaScript被转换成JavaScript。不过,我还没试过。

JavaScript实际上是一种非常酷的语言。它有一些缺陷(包括允许你做一些非常愚蠢的事情),但只要有一点自律,你就能做出伟大的事情。Javascript实际上是面向对象的,不是面向类的,但是你可以做很多相同的事情。您没有(afaik)继承权,但是它对输入一点都不严格(它的一个强大但也很危险的特性),所以您会发现它不受限制。


使用moootools。请参阅如何编写Moools类的文章。


mepcotterrel提供了良好的链接,但我想补充一点,我个人更喜欢将名称空间视为对象,即DoctaJonez.Namespace1 = {};


例如,在http://mckoss.com/jscript/object.htm中。

在google上搜索"面向对象的javascript"时,你会发现很多例子。通过查看流行的JavaScript框架(如Ext ;JS),您将了解这些概念以及它们在实践中的应用方式。


请参阅Mozilla Developer Network(MDC)文章基于类与基于原型的语言。