面向对象vs JavaScript
我有面向对象编程的背景。我开始大量使用JavaScript。随着项目的发展,维护变得越来越困难。在Java中,我应用OOP原则来控制事情。我应该用JavaScript做什么?我应该学习什么来控制JavaScript应用程序?您也可以将OOP原则应用到JavaScript开发中。Javascript使用原型继承,但这是一个实现细节。概念仍然是一样的。您熟悉的大多数概念都与javascript有直接的相似之处 其他行之有效的方法也适用: 1) 保持干燥——不要重复。重复的代码总是有害的。面向对象vs JavaScript,javascript,Javascript,我有面向对象编程的背景。我开始大量使用JavaScript。随着项目的发展,维护变得越来越困难。在Java中,我应用OOP原则来控制事情。我应该用JavaScript做什么?我应该学习什么来控制JavaScript应用程序?您也可以将OOP原则应用到JavaScript开发中。Javascript使用原型继承,但这是一个实现细节。概念仍然是一样的。您熟悉的大多数概念都与javascript有直接的相似之处 其他行之有效的方法也适用: 1) 保持干燥——不要重复。重复的代码总是有害的。 2) 独立
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。
- 干燥-不要重复你自己
- 观察者(发布/订阅)模式
当我处于同样的处境时,我开始思考“别人是怎么做的”。最后是和,我在看他们如何实现小部件/插件,以便其他人能够扩展框架。这就是在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简单得多。例如,从纯原型的角度来看,您不需要构造函数。“方法”只是碰巧附加到原型上的常规函数(这意味着它们可以作为所有继承对象的属性使用)
- ——简明扼要
- ——资源比较深入、比较齐全
- 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"