面向对象vs JavaScript

面向对象vs JavaScript,javascript,Javascript,我有面向对象编程的背景。我开始大量使用JavaScript。随着项目的发展,维护变得越来越困难。在Java中,我应用OOP原则来控制事情。我应该用JavaScript做什么?我应该学习什么来控制JavaScript应用程序?您也可以将OOP原则应用到JavaScript开发中。Javascript使用原型继承,但这是一个实现细节。概念仍然是一样的。您熟悉的大多数概念都与javascript有直接的相似之处 其他行之有效的方法也适用: 1) 保持干燥——不要重复。重复的代码总是有害的。 2) 独立

我有面向对象编程的背景。我开始大量使用JavaScript。随着项目的发展,维护变得越来越困难。在Java中,我应用OOP原则来控制事情。我应该用JavaScript做什么?我应该学习什么来控制JavaScript应用程序?

您也可以将OOP原则应用到JavaScript开发中。Javascript使用原型继承,但这是一个实现细节。概念仍然是一样的。您熟悉的大多数概念都与javascript有直接的相似之处

其他行之有效的方法也适用:

1) 保持干燥——不要重复。重复的代码总是有害的。
2) 独立关注点——使用MVC或MVVM模式保持代码整洁,只做一件事。
3) 测试——当我听到“难以维护”时,我的大脑会将其转化为缺乏测试。您当然可以为javascript项目编写单元测试。

4) 代码审查——代码审查可以很好地拒绝重复代码、未正确编制、未格式化的代码等。

在JavaScript中,函数是对象;并进一步解释

示例JavaScript对象

function myObj() {
  this.myMethod = function() {
    alert('hello');
  } 
}
var demo_obj = new myObj(); 
demo_obj.myMethod();
控制局面的模式

  • 这里列出的模式是JavaScript特有的。
  • -可以使用工具在Rhino或node中的桌面上运行此操作
  • 这里列出的模式是典型的OOP语言,而不是 特别是JavaScript。
  • 干燥-不要重复你自己
  • 观察者(发布/订阅)模式
让事情失控的反模式

  • 污染名称空间
  • eval()的使用
  • 针对对象的原型设计
  • 内联脚本标记
  • 使用document.write

  • 当我处于同样的处境时,我开始思考“别人是怎么做的”。最后是和,我在看他们如何实现小部件/插件,以便其他人能够扩展框架。

    这就是在javascript中定义对象和方法的方式

    function SomeObj() {
    
        this.someMethod = function() {
            alert('boo');
        }
    }
    
    var o_obj = new SomeObj();
    o_obj.someMethod(); //alerts "boo"
    
    希望能有帮助

    您还可以使用prototype创建静态函数

    this.prototype.someMethod = function() {
        alert('boo');
    }
    

    用javascript定义简单对象和方法的另一种方法(无需
    new

    此模式不支持继承,但很多时候它已经足够了。

    为什么选择“vs”?JavaScript支持面向对象编程,但不是像Java那样以传统的基于类的方式

    JavaScript的OOP工作方式通常被称为“原型继承”,或者更具体地说是“去传递原型继承”。这可以归结为“如果您在对象中查找属性'foo',但在那里找不到它,那么请尝试在对象的原型中查找'foo'。也就是说,属性的查找被委托给对象的原型(我们说对象从原型继承属性)

    原型继承的工作方式有两个含义。例如:

    • JavaScript中的对象是“动态”的,因为它们只是一组名称-值对。新属性可以在运行时添加和删除,因此它们的“静态”程度远低于典型类意义上的对象
    • delegative原型继承的工作方式(“如果你在这里找不到原型,那么就看这里”)意味着它比经典的OOP简单得多。例如,从纯原型的角度来看,您不需要构造函数。“方法”只是碰巧附加到原型上的常规函数(这意味着它们可以作为所有继承对象的属性使用)
    原型继承和经典继承都有赞成和反对的,但重要的是要记住它们是不同的

    现在,JavaScript在某种意义上受到了Java和其他经典语言的启发,因此他们决定将语法改为“类式”,以使习惯于类的人更容易入门。我不会详细说明这一点;在其他地方已经有很大程度的记录

    一些有趣的帖子:

    • ——简明扼要
    • ——资源比较深入、比较齐全

      • Pluralsight有一门关于这个主题的课程:这可能会提供一些见解。两个警告:1。我还没有读完这门课程,但内容看起来很棒,我对我所修的其他Pluralsight课程印象深刻,2。它不是免费的(但如果它能节省您的时间,那么它可能值得一小笔钱,因为您有更好的代码结构)。不,我不为Pluralsight工作


        除了本帖中提到的js框架外,您还可以在这里查看Knockoutjs-很棒的教程。淘汰赛以MVVM为重点。注意,stackoverflow中有一个很好的讨论,Pluralsight也有一个关于使用Knockout的课程,我已经看过并推荐了。

        看看Backbone.js,也许还有Coffeescript。JavaScript是面向对象的。请查看一些OO思想。这里可能重复了许多与web开发相关的JS好建议。作为一种语言,弗拉纳根的“Javascript:权威指南”是非常宝贵的。这是如何回答这个问题的呢?。。。好吧,够近了。然而,区分是很重要的;这绝对值得一看。你说的“足够近”是什么意思?你不同意吗?原型不是子类的同义词;字段和函数的“采用”方式存在一些差异。例如,共享一个原型的多个对象实际上共享一个原型字段,更改它可以更改所有子对象的属性。对。我没说同义词。我说的是类似的。请使用
        someObj
        中的第一个大写字母。它是JavaScript中的标准命名转换。它表明一个人
        function creaeSomeObj() {
            var that = {};
            that.someMethod = function() {
                alert('boo');
            }
            return that;
        }
        
        var o_obj = createSomeObj();
        o_obj.someMethod(); //alerts "boo"