2012-03-21 33 views
6

我有OOP的背景。我开始用JavaScript工作了很多。随着项目的发展,维护它变得越来越困难。在Java中,我应用OOP原则来控制事物。我应该怎么处理JavaScript,我应该研究哪些旨在保持JavaScript应用程序的控制权?OOP vs JavaScript

+0

看看Backbone.js的,也许CoffeeScript的。他们一起工作得很好。 – asawyer 2012-03-21 20:09:37

+13

JavaScript是面向对象的。 – Gumbo 2012-03-21 20:09:58

+0

检查出[helephant(http://helephant.com/2008/08/17/how-javascript-objects-work/)的一些OO的思想。的 – jbabey 2012-03-21 20:13:40

回答

6

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

其他尝试和真正的方法也同样适用:

1)保持干爽 - 不要重复自己。重复的代码总是邪恶的。
2)单独问题 - 使用MVC或MVVM模式保持代码清洁,只做1件事。
3)测试 - 当我听到“难以维护”时,我的大脑将其转化为缺乏测试。您当然可以为JavaScript项目编写单元测试。
4)代码审查 - 代码审查可以是拒绝重复的代码的好方法,代码是不正确精雕细琢,未格式化,等....

+0

......好吧,够近了。然而,这种区别很重要。这绝对值得长期关注。 – 2012-03-21 20:12:09

+0

你是什么意思'够接近'?你不同意吗? – hvgotcodes 2012-03-21 20:28:21

+0

原型与子类不是同义的;领域和功能如何被“采用”有一些差异。例如,共享原型的多个对象字面上共享原型字段,并且更改它可以更改所有子对象的属性。 – 2012-03-21 20:31:58

-1

在JavaScript中,函数是对象; Mozilla Developer Network,McKoss,SitePoint,JavaScript Kit进一步解释。

实例JavaScript对象

function myObj() { 
    this.myMethod = function() { 
    alert('hello'); 
    } 
} 
var demo_obj = new myObj(); 
demo_obj.myMethod(); 

模式来控制住

反模式,以让事情失去了控制

  1. 的污染命名空间
  2. 使用eval()
  3. 原型侵害的对象物体
  4. 联脚本的标签。
  5. 使用文件撰写
+3

这是如何回答这个问题的? – delnan 2012-03-21 20:12:02

0

的当我在相同的情况下,我开始看“怎么做等”。它以http://dojotoolkit.org/http://jquery.com结尾,我正在研究他们如何实现小部件/插件,以便其他人可以扩展该框架。

2

这是你如何在javascript中定义对象和方法。

function SomeObj() { 

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

var o_obj = new SomeObj(); 
o_obj.someMethod(); //alerts "boo" 

希望它有帮助。

您还可以使用原型创建静态函数。

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

请在'someObj'中使用*第一个大写字母*。它是JavaScript中的标准命名转换。它表明应该用'new'来创建对象的实例。比较'var now = new Date();'。 – Oleg 2012-05-12 17:25:09

+0

的确如此。对象名称甚至转为蓝色,现在它们以大写字母开头。 – c0d3Junk13 2012-05-13 15:43:38

+0

我建议您另外使用http://www.jslint.com/来验证代码。你。你会看到''构造函数名'someObj'应该在你以前的代码中以大写字母'消息开头。另外你会发现你应该包括';' 'this.someMethod = function(){alert('boo'); }因为它是赋值语句。 – Oleg 2012-05-13 16:08:27

0

另一种在javascript中定义简单对象和方法的方法(不需要new)。

function creaeSomeObj() { 
    var that = {}; 
    that.someMethod = function() { 
     alert('boo'); 
    } 
    return that; 
} 

var o_obj = createSomeObj(); 
o_obj.someMethod(); //alerts "boo" 

此模式不支持继承,但多次就足够了。

0

为什么“vs”? JavaScript支持面向对象的编程,但不是以传统的基于类的方式,例如在例如Java的。

JavaScript的OOP工作方式通常称为“原型继承”,或者更具体地说是“委托原型继承”。这可以归结为:“如果你正在寻找一个对象的属性‘富’,你不能找到它,然后尝试寻找对象的原型而不是内部‘富’”。也就是说,该物业的查找是委托到对象的原型(我们说对象从原型继承属性)。

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

  • JavaScript中的对象是“动态”的,因为它们只是一堆名称 - 值对。新的属性可以在运行时添加和删除,因此它们比典型的类对象中的“静态”要少得多。
  • 方式delegative原型继承的作品(“如果你不能找到原型这里,再看看这里代替”)意味着它比传统的面向对象多简单。例如,从纯粹的原型角度来看,您不需要构造函数。 “方法”是指发生在连接到原型(这意味着它们可以作为所有继承对象的属性)只是普通的功能。

有赞成的和反对的既原型和经典的继承,但要记住,他们是不同是很重要的。现在

,JavaScript是由Java和其他古典语言启发某种意义上,等于是他们决定把语法“类像”,使其更容易使用的类人上手。在这方面我不会详细说明。它在很大程度上已经在其他地方被记录。

一些有趣的帖子:

0

Pluralsight有一个关于此主题的课程:Structuring JavaScript Code,可能会提供一些见解。注意两点:1,我没有走过的历程坐 - 但是内容很精彩,我一直印象深刻,我已经采取了其他Pluralsight课程,2。它不是免费的(但可能是值得的小$如果它可以节省您在B/C路上的时间,使您拥有更好的代码结构)。不,我不为Pluralsight工作。

除了这个线程提到的js框架,也可以看看Knockoutjs - 在这里learnknockoutjs.com伟大的教程。 Knockout是MVVM的焦点。注意,存在计算器comparing Backbone to Knockout了很好的讨论,并Pluralsight也有使用淘汰赛,我都看过,做推荐的课程。