Javascript面向对象的语法参考

时间:2012-01-17 04:08:41

标签: javascript oop syntax dictionary reference

我是Javascript的新手,但我做了很多C#,VB.NET和Java编程,这些语言完全面向对象。似乎Javascript无法支持所有OO功能。

我正在寻找面向对象的Javascript语法参考。

它应包括什么

  • 继承语法
    • 在子构造函数中调用父构造函数
    • 请参阅父对象的实例
    • 多重继承(javascript似乎没问题)
    • 继承类型检查
  • 静态/共享方法
  • 公共字段
  • 受保护/私有字段(我不确定Javascript是否拥有它)
  • 接口?

5 个答案:

答案 0 :(得分:2)

并不是Javascript不支持所有OO功能。来自经典OO功能的每个概念都可以在Javascript中实现,问题在于是否真的有必要将所有这些概念转换为它。请记住,Javascript是一种原型语言,大多数情况下,为了自己的利益而更容易使用它,而不是试图从其他静态类型语言中获得所有功能(尽管它不被认为是邪恶的)。

关于您提到的主题:

  • 在子构造函数中调用父构造函数:

    由于Javascript是原型语言,因此没有父类,只有父对象。如果以某种方式你需要从后代对象调用父构造函数,你的设计可能是错误的。当您从中生成一个派生(后代)对象时,父对象可能已经存在,因此不需要再次调用构造函数,即使理论上这听起来也很奇怪。

  • 请参阅父对象的实例:

    除非您在子对象上创建引用属性,否则无法使用AFAIK。

  • 静态/共享方法:

    在Javascript中没有正式的实现。可以像静态方法一样访问每个方法。见例:

    Person.sayHello = function(){
        alert("Hello!");
    }
    
    Person.sayHello();
    new Person.sayHello();
    
  • 受保护/私有字段 ECMAScript 5.1有一个闪亮的附加功能(请参阅我的第二个链接,了解传统的私有成员支持。)。现在你有defineProperty方法,代码解释了自己:

    var cat = {};
    
    Object.defineProperty(cat, "name", {
      value: "Maru",
      writable: false,
      enumerable: true,
      configurable: false
    });
    
    Object.defineProperty(cat, "skill", {
      value: "exploring boxes",
      writable: true,
      enumerable: true,
      configurable: true
    });
    

这里有一些链接对我帮助很大,而且我最近读过的一些链接:

  1. About Classical inheritance in Javascript
  2. Private members in Javascript
  3. Javascript Additions in ECMAScript 5.1

答案 1 :(得分:1)

阅读Javascript, the Good Parts by Douglas Crockford,您将获得所需内容。

答案 2 :(得分:1)

<强>图书

<强>画

在堆栈溢出

<强>其他

答案 3 :(得分:0)

Javascript是一种原型脚本语言。这些链接可以帮助您入门。

Wiki - Prototype base programming

Understanding javascript prototypes

OOP in Javascript

答案 4 :(得分:0)

开始使用John Resig的专业JavaScript技术和#34; Javascript,Good Parts&#34;道格拉斯克罗克福德。

像Java一样编写javascript。它们不一样。