2011-05-18 112 views
4

我正在维护具有以下编码风格的ASP.NET MVC应用程序。视图有:这是什么javascript编码风格?

<script type="text/javascript"> 

    $(document).ready(function() { 

     SAVECUSTOMERS.init(); 
    }); 
</script> 

有一个js文件中包含的是沿着这些线路有云:

var SAVECUSTOMERS = (function() { 

    init = function() { 

     $("#saveCust").bind("click", OnSave); 
     $("#cancel").bind("click", OnCancel); 

    }, 

    OnSave= function() { 

     //Save Logic; 

    }, 

    OnCancel = function() { 
       //Cancel logic; 

    } 

    return { init: init }; 

})(); 
  1. 这是一个最佳实践JS代码风格?意图有非突兀的JS?
  2. 什么是SAVECUSTOMERS?我知道在JavaScript中创建类有不同的方法(按此link),但此风格不属于列出的任何类别
  3. 我在哪里可以找到关于此类JS编码的更多信息?
+0

一些[jquery](http://www.w3schools.com/jquery/default.asp)教程在这里可能会有所帮助。 – Kyle 2011-05-18 14:35:03

回答

4

1)使用$(document).ready(或另一个库中的类似函数)函数被认为是JavaScript中的标准惯例。首先,它确保您的JavaScript在完成评估/构建DOM的页面上执行。当确定DOM何时已准备就绪时,它还抽象出一些浏览器实现的不一致性。但我认为你主要是指第二代码块。

你看到的是SAVECUSTOMERS被分配了自动执行匿名函数的结果。这样做有几个原因,最常见的是能够控制匿名函数中函数和数据的作用域和“命名空间”。这是因为JavaScript具有词法范围,而不是块级范围。

使用JavaScript中这些自调用函数的做法是很常见的

但是代码本身有几个问题。变量init,OnSave和OnCancel被声明为全局变量(因为var关键字被省略)。这在很大程度上破坏了将它们包装在自我调用功能中的目的。此外,该函数的内容使用对象分配语法和标准表达式语法的混合,这将导致语法错误。

此外,通过仅返回init函数,onSave和onCancel函数通过使用闭包有效地“隐藏”或“私有”。这有助于保持命名空间的清洁和封装。

如果我写这个代码(在这里一些个人perferences,有有所建树simliar几个方法),那么就应该是这样的:

var SaveCustomers = (function($) { 
    var init = function() { 
     $("#saveCust").bind("click", onSave); 
     $("#cancel").bind("click", onCancel); 
    }; 

    var onSave = function() { 
     //Save Logic; 
    }; 

    var onCancel = function() { 
     //Cancel logic; 
    } 

    return { init: init }; 

})(jQuery); 

的一些注意事项以上:

  • 我使用var关键字声明变量。这使它们的作用域保持本地化(你也可以在技术上使用命名函数声明)

  • 我将jQuery作为自调用函数中的参数传递,并将它作为函数调用中的参数赋值给$ 。这将保护函数中的$变量,以便我们知道它引用了jQuery,并且没有被同样使用$的辅助库消灭。

2)SAVECUSTOMERS是一个基本的JavaScript对象,它具有一个单一的拥有的财产称为“初始化”,它的值是一个函数,由所述执行内部初始化声明所定义的。

3)不知道如何回答这个问题 - 对于理解JavaScript的最佳做法,最好的办法是通过其他的JavaScript代码,知道是优质的,比如jQuery的来源,或原型,或者阅读下划线等

+1

at 2),它实际上也有OnSave和OnCancel。 – Felix 2011-05-18 14:37:59

+0

@Felix生成的对象不直接包含OnSave和OnCancel,它们只能通过执行click事件处理程序来实现。实际上,对象的内容仅限于init – Matt 2011-05-18 14:40:17

+0

的值啊,没有看到那里的回报。对于那个很抱歉。 – Felix 2011-05-19 07:44:49

2

这种风格被称为jQuery的...你检查的JQuery网站,通过它去......

1

它使用JQuery library

JQuery包含一个名为$()的函数,它允许您使用CSS类语法从DOM中选择元素。

$(document).ready位是一种标准的JQuery方法,用于确保所附代码只在页面加载完成后运行。这是确保事件正确连接到相关DOM对象所必需的。

函数被用作其他函数的参数的位被称为'闭包'它是编写Javascript的一种非常常见的方式,但特别是当使用JQuery时,它使事情变得容易以及这种编码风格的最小代码。

请参阅本页面:http://blog.morrisjohns.com/javascript_closures_for_dummies初学者讨论如何在Javascript中使用闭包以及如何编写它们(请注意,该页面根本没有看JQuery;闭包是JavaScript特性,它被JQuery严重使用,但您不需要JQuery来编写闭包)

0

这是使用jQuery处理事件的常用方法。

会发生什么basicly是您检查文档是否因此加载

$(document).ready(function() { 

     SAVECUSTOMERS.init(); 
    }); 

当它是你开始你的绑定添加到按钮或什么都搞不好会。

0

SAVECUSOMTERS中代码的意图是模仿对象中的私有和公共属性。由于JS默认不支持这些,所以这个自调用函数执行并返回一定数量的属性。在这种情况下,它返回'init'方法。尽管您看到OnSave和OnClick,但您会发现根本无法访问它们。它们是“私人”的,只能在该功能内部使用。

$()函数是一个名为jQuery的JavaScript库的一部分http://jquery.com它是一个非常好的库,主要用于DOM操作。

$(document)。ready()函数是jQuery不断轮询页面直到它被加载的一种方式。如果是,则执行内部的JavaScript。

0
  1. 目标是具有公共和私人功能。 OnSaveOnCancel是私有函数,只能在自执行的匿名函数(function() { ... }())的范围内进行访问,该函数返回一个可公开访问init函数的对象。

  2. SAVECUSTOMERS成为由上述函数返回的对象,即{ init: init },该对象具有访问该闭包内的函数的一个方法init

  3. 您可以阅读道格拉斯Crockford的的Javascript:好的部分或斯托扬斯特凡的的Javascript模式

其他说明:

  • $()功能属于jQuery库
  • 有语法错误,因为函数应该由;而不是,分开,因为它们在函数内而不是对象内。