面向对象的Java最佳实践?[关闭]

2020/10/10 03:41 · javascript ·  · 0评论

我发现自己用Javascript编写了一个大项目。我记得上一篇文章是一次冒险,因为骇客的JS很快就会变得不可读,我希望这段代码是干净的。

好吧,我正在使用对象来构建库,但是有几种方法可以在JS中定义事物,这意味着在范围,内存管理,名称空间等方面都有重要意义。EG:

  • 使用var与否;
  • 在文件中或(function(){...})()jquery样式中定义内容
  • 是否使用this
  • 使用function myname()myname = function();
  • 在对象主体中定义方法或使用“原型”;
  • 等等

那么,用JS在OO中进行编码时,最佳实践到底是什么?

这里确实有学术解释。只要能处理高质量和鲁棒性的书,都欢迎链接到这些书。

编辑:

得到了一些读物,但我仍然对上述问题的答案和最佳实践非常感兴趣。

是否使用var

您应该在var语句中引入任何变量,否则它将进入全局范围。

值得一提的是,在严格模式("use strict";)中,未声明的变量赋值throwsReferenceError

目前,JavaScript没有阻止范围。克罗克福德学校教您将var语句放在函数体的开头,而Dojo的风格指南则指出,应在尽可能小的范围内声明所有变量JavaScript 1.7中引入let语句和定义不属于ECMAScript标准的一部分。)

优良作法是将常规使用的对象的属性绑定到局部变量,因为它比查找整个作用域链要快。(请参阅优化JavaScript以实现出色的性能和低内存消耗。)

定义文件或`(function(){...})()`中的内容

如果您不需要在代码之外访问对象,则可以将整个代码包装在一个函数表达式中,这称为模块模式。它具有性能上的优势,并且还可以使您的代码最小化并在较高层次上被遮盖。您还可以确保它不会污染全局名称空间。JavaScript中的包装函数还允许您添加面向方面的行为。Ben Cherry在模块模式方面有深入的文章

是否使用“ this”

如果在JavaScript中使用伪古典继承,则几乎无法避免使用this使用哪种继承模式都取决于您的口味。对于其他情况,请查看Peter Michaux关于JavaScript Widgets(不含“ this”)的文章

使用`function myname()`或`myname = function();`

function myname()是一个函数声明,并且myname = function();是一个分配给variable的函数表达式myname后一种形式表示函数是一类对象,您可以对它们执行任何操作,例如使用变量。它们之间的唯一区别是所有函数声明都被提升到作用域的顶部,这在某些情况下可能很重要。否则,它们是相等的。function foo()是简写形式。有关起吊的更多详细信息,请参见JavaScript范围和起吊文章。

在对象主体中定义方法或使用“原型”

由你决定。JavaScript具有四种对象创建模式:伪经典,原型,功能和部分(Crockford,2008年)。每个人都有自己的优缺点,请参阅克罗克福德在他的视频讲座或得到他的书好的部分匿名已经建议

构架

我建议您选择一些JavaScript框架,研究它们的约定和样​​式,并找到最适合您的实践和模式。例如,Dojo工具包提供了一个健壮的框架来编写甚至支持多重继承的面向对象的JavaScript代码。

模式

最后,有一个博客致力于探讨常见的JavaScript模式和反模式还要检查问题JavaScript是否有任何编码标准?在堆栈溢出中。

自从问了这个问题后,我将写下一些我阅读或放入应用程序中的东西。因此,阅读本书的人不会感到沮丧,因为大多数答案都是伪装的RTMF(即使我必须承认,建议的书也不错)。

变量用法

应该在JS的更高范围中声明任何变量。因此,无论何时要使用新变量,都应对其进行声明,以避免出现诸如操作全局var而不引起注意的不良情况。因此,请始终使用var关键字。

在对象make中,var变量为private。如果只想声明一个公共变量,请使用this.my_var = my_value它。

申报方法

在JS中,它们是方法声明的多种方式。对于OO程序员,最自然而又有效的方法是使用以下语法:

在对象体内

this.methodName = function(param) {

/* bla */

};

有一个缺点:由于有趣的JS范围,内部函数将无法访问“ this”。Douglas Crockford建议使用名为“ that”的常规局部变量来绕过此限制。所以变成

function MyObject() {

    var that = this;

    this.myMethod = function() {

        jQuery.doSomethingCrazy(that.callbackMethod);

    };

};

不要依赖自动结束

;如果您忘记了,JS会尝试自动添加到该行的末尾。不要依赖这种行为,因为您会得到一些混乱的错误,难以调试。

首先应该了解的原型程式设计,让你知道那种野兽你处理什么用,然后看看在MDC的JavaScript风格指南JavaScript页面在MDC我还发现最好用一种工具(即)来提高代码质量。JavaScript Lint或其他变体。

面向对象的最佳实践听起来更像是您要查找模式,而不是专注于代码质量,因此请查看Google搜索:javascript模式jQuery模式

您可能想查看John Resig(jQuery)的《 JavaScript忍者秘密》“这本书旨在吸引一名中级JavaScript开发人员,并为他提供从头开始创建跨浏览器JavaScript库所需的知识。”

该草案可通过发布者获得:http :
//www.manning.com/resig/

Douglas Crockford的主页上也有一些不错的JavaScript文章:http :
//www.crockford.com/

我经常觉得这里是唯一将MooTools用于我的JavaScript的人。

它代表了中号Ÿ Ø bject Ø riented工具,mootools的。

我真的很喜欢他们对javascript中OOP的看法。您也可以将其类实现与jquery一起使用,因此您不必抛弃jquery(尽管mootools也可以做到)。

无论如何,请充分阅读第一个链接,看看您的想法,第二个链接是mootools文档。

MooTools与继承

MooTools类别

这是一本涵盖了大部分基础的书:

面向对象的Javascript,可提供高质量的应用程序和库

本文地址:http://javascript.askforanswer.com/mianxiangduixiangdejavazuijiashijianguanbi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!