【问题标题】:Javascript Object-Oriented Syntax Reference [closed]Javascript 面向对象的语法参考
【发布时间】:2012-02-11 22:56:20
【问题描述】:

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

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

应该包括什么

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

【问题讨论】:

  • 问题太宽泛了。阅读 John Resig 的Pro JavaScript Techniques。它涵盖了这些内容。
  • 其实,我需要的只是语法参考。例如类定义是function MyClass(value) { this.value = value;}。而继承是SubClass.prototype.__proto__ = ParentClass.prototype;

标签: javascript oop syntax dictionary reference


【解决方案1】:

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

关于你提到的话题:

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

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

  • 引用父对象的实例:

    除非您在子对象上创建引用属性,否则这是不可能的。

  • 静态/共享方法:

    在 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

【讨论】:

    【解决方案2】:

    书籍

    视频

    堆栈溢出

    其他

    【讨论】:

      【解决方案3】:

      阅读Javascript, the Good Parts by Douglas Crockford,你会得到你想要的。

      【讨论】:

        【解决方案4】:

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

        Wiki - Prototype base programming

        Understanding javascript prototypes

        OOP in Javascript

        【讨论】:

        • 我一定是冒犯了别人,从昨天晚上开始,我的有效答案似乎遭到了很多拒绝。
        • 这个反对票不是个人的。我不赞成所有只是链接到其他网站的答案。
        • 即使它是线程启动器所要求的?
        【解决方案5】:

        开始学习 John Resig 的 Pro JavaScript 技术和 Douglas Crockford 的“Javascript, the Good Parts”。

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

        【讨论】:

          猜你喜欢
          • 2016-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 2023-03-14
          • 2013-05-28
          相关资源
          最近更新 更多