我有OOP的背景。我开始用JavaScript工作了很多。随着项目的发展,维护它变得越来越困难。在Java中,我应用OOP原则来控制事物。我应该怎么处理JavaScript,我应该研究哪些旨在保持JavaScript应用程序的控制权?OOP vs JavaScript
回答
您也可以将OOP原则应用于Javascript开发。 Javascript使用原型继承,但这是一个实现细节。这些概念仍然是一样的。大多数您熟悉的概念都有直接类似于javascript的概念。
其他尝试和真正的方法也同样适用:
1)保持干爽 - 不要重复自己。重复的代码总是邪恶的。
2)单独问题 - 使用MVC或MVVM模式保持代码清洁,只做1件事。
3)测试 - 当我听到“难以维护”时,我的大脑将其转化为缺乏测试。您当然可以为JavaScript项目编写单元测试。
4)代码审查 - 代码审查可以是拒绝重复的代码的好方法,代码是不正确精雕细琢,未格式化,等....
......好吧,够近了。然而,这种区别很重要。这绝对值得长期关注。 – 2012-03-21 20:12:09
你是什么意思'够接近'?你不同意吗? – hvgotcodes 2012-03-21 20:28:21
原型与子类不是同义的;领域和功能如何被“采用”有一些差异。例如,共享原型的多个对象字面上共享原型字段,并且更改它可以更改所有子对象的属性。 – 2012-03-21 20:31:58
在JavaScript中,函数是对象; Mozilla Developer Network,McKoss,SitePoint,和JavaScript Kit进一步解释。
实例JavaScript对象
function myObj() {
this.myMethod = function() {
alert('hello');
}
}
var demo_obj = new myObj();
demo_obj.myMethod();
模式来控制住
- 这里列出的模式是特别为JavaScript的东西。
- Use a Script Loader。
- Use a JS Framework。
- Lint your JavaScript. - 工具可用于在您的桌面上在Rhino或节点上运行此工具。
- Minify your JS.
- 这里列出的模式是典型的面向对象语言,而不是 特别的JavaScript。
- 干 - 不要重复自己。
- Observer(Pub/Sub)模式。
反模式,以让事情失去了控制
- 的污染命名空间
- 使用eval()
- 原型侵害的对象物体
- 联脚本的标签。
- 使用文件撰写
这是如何回答这个问题的? – delnan 2012-03-21 20:12:02
的当我在相同的情况下,我开始看“怎么做等”。它以http://dojotoolkit.org/和http://jquery.com结尾,我正在研究他们如何实现小部件/插件,以便其他人可以扩展该框架。
这是你如何在javascript中定义对象和方法。
function SomeObj() {
this.someMethod = function() {
alert('boo');
}
}
var o_obj = new SomeObj();
o_obj.someMethod(); //alerts "boo"
希望它有帮助。
您还可以使用原型创建静态函数。
this.prototype.someMethod = function() {
alert('boo');
}
请在'someObj'中使用*第一个大写字母*。它是JavaScript中的标准命名转换。它表明应该用'new'来创建对象的实例。比较'var now = new Date();'。 – Oleg 2012-05-12 17:25:09
的确如此。对象名称甚至转为蓝色,现在它们以大写字母开头。 – c0d3Junk13 2012-05-13 15:43:38
我建议您另外使用http://www.jslint.com/来验证代码。你。你会看到''构造函数名'someObj'应该在你以前的代码中以大写字母'消息开头。另外你会发现你应该包括';' 'this.someMethod = function(){alert('boo'); }因为它是赋值语句。 – Oleg 2012-05-13 16:08:27
另一种在javascript中定义简单对象和方法的方法(不需要new
)。
function creaeSomeObj() {
var that = {};
that.someMethod = function() {
alert('boo');
}
return that;
}
var o_obj = createSomeObj();
o_obj.someMethod(); //alerts "boo"
此模式不支持继承,但多次就足够了。
为什么“vs”? JavaScript支持面向对象的编程,但不是以传统的基于类的方式,例如在例如Java的。
JavaScript的OOP工作方式通常称为“原型继承”,或者更具体地说是“委托原型继承”。这可以归结为:“如果你正在寻找一个对象的属性‘富’,你不能找到它,然后尝试寻找对象的原型而不是内部‘富’”。也就是说,该物业的查找是委托到对象的原型(我们说对象从原型继承属性)。
原型继承的工作方式有几点含义。例如:
- JavaScript中的对象是“动态”的,因为它们只是一堆名称 - 值对。新的属性可以在运行时添加和删除,因此它们比典型的类对象中的“静态”要少得多。
- 方式delegative原型继承的作品(“如果你不能找到原型这里,再看看这里代替”)意味着它比传统的面向对象多简单。例如,从纯粹的原型角度来看,您不需要构造函数。 “方法”是指发生在连接到原型(这意味着它们可以作为所有继承对象的属性)只是普通的功能。
有赞成的和反对的既原型和经典的继承,但要记住,他们是不同是很重要的。现在
,JavaScript是由Java和其他古典语言启发某种意义上,等于是他们决定把语法“类像”,使其更容易使用的类人上手。在这方面我不会详细说明。它在很大程度上已经在其他地方被记录。
一些有趣的帖子:
- hughfdjackson's introduction to JavaScript OOP - 短多到了点,
- Sorella's longer "Understanding Javascript OOP" - 而深入和非常完整资源。
Pluralsight有一个关于此主题的课程:Structuring JavaScript Code,可能会提供一些见解。注意两点:1,我没有走过的历程坐 - 但是内容很精彩,我一直印象深刻,我已经采取了其他Pluralsight课程,2。它不是免费的(但可能是值得的小$如果它可以节省您在B/C路上的时间,使您拥有更好的代码结构)。不,我不为Pluralsight工作。
除了这个线程提到的js框架,也可以看看Knockoutjs - 在这里learnknockoutjs.com伟大的教程。 Knockout是MVVM的焦点。注意,存在计算器comparing Backbone to Knockout了很好的讨论,并Pluralsight也有使用淘汰赛,我都看过,做推荐的课程。
- 1. OOP&Forms,JavaScript VS PHP
- 2. PHP OOP vs Inline
- 3. OOP Javascript vs Java(或其他,比如PHP)
- 4. 算法VS OOP
- 5. mysqli,OOP vs Procedural
- 6. PHP包含vs OOP
- 7. this.constructor.SomeVarible vs this.SomeVarible in OOP JS
- 8. Javascript OOP框架
- 9. Javascript OOP问题
- 10. PhoneGap和Javascript OOP
- 11. Javascript OOP&Coffe
- 12. Javascript OOP,函数
- 13. JavaScript OOP错误
- 14. Javascript OOP继承
- 15. 调试OOP javascript
- 16. 的Javascript OOP和
- 17. Javascript字面与功能oop
- 18. javascript oop多个类
- 19. JavaScript如何做OOP?
- 20. JavaScript的结构OOP
- 21. javascript/jquery oop学习
- 22. JavaScript的OOP问题
- 23. 的JavaScript OOP方法
- 24. 问题OOP的Javascript
- 25. 属性vs PHP属性数组OOP
- 26. 抽象类VS枚举(一般OOP)
- 27. WCF对象设计 - OOP vs SOA
- 28. OOP echo $ this-> title = $ part VS echo $ par
- 29. OOP vs运行时的程序
- 30. OOP:私有方法VS新类
看看Backbone.js的,也许CoffeeScript的。他们一起工作得很好。 – asawyer 2012-03-21 20:09:37
JavaScript是面向对象的。 – Gumbo 2012-03-21 20:09:58
检查出[helephant(http://helephant.com/2008/08/17/how-javascript-objects-work/)的一些OO的思想。的 – jbabey 2012-03-21 20:13:40