2013-10-09 80 views
0

我通过查看其他人的代码学习了开发,所以我对术语不太熟悉。最近我一直在我的书面方式JS/jQuery的是这样的:这是什么样的模式?

$(document).ready(function() { 
    testingFunc.init(); 
}); 

var testingFunc = { 
    $object: $('#object'), 
    init: function() { 
     var _that = this; 
     console.log($object); 
    } 
} 

能有人告诉我,如果这是某种模式?或者有人可以告诉我如何描述我上面所做的代码?

+2

这不是一个模式,它没有名字。这只是正常的代码。您创建了一个对象,并在DOM准备好时调用该对象的一个​​方法。尽管如此,为了让你的代码工作,它必须在DOM上运行(因为你试图获得对'$('#object')'的引用),所以使用'$(document).ready(function( ){'是不必要的。 –

+0

$(document).ready(function(){testingFunc.init();});'=>'$(testingFunc.init);' – rexcfnghk

+0

@FelixKling的快捷方式我的回答。 – plalx

回答

0

也许你可以将其命名为Object Literal pattern,就像她在文章中使用的Rebecca Murphey一样。不过,我认为它并没有被广泛采用作为这种代码结构的正式名称,但似乎是合适的。

0

第一部分是使用jQuery选择器与侦听器“ready”。这意味着一旦文档(在这种情况下是浏览器窗口)准备就绪(Web方面,这意味着页面完成加载时),选择器和侦听器所附带的回调函数就会运行。

代码的第二部分是按照一个标准的称为对象的文本,这是遵循键 - 的>我想你想知道的ready功能的原则值

0

一个JavaScript方法。为了理解它是如何工作的,您必须知道,当您将HTML页面加载到浏览器中时,HTML结构会变成一个名为“DOM”(文档对象模型)的JavaScript树。在您的示例中,通过名为document的变量引用DOM。为了填充这个树,每个标记都必须被初始化为一个javascript对象。一旦完成这项工作,就会引发“就绪”事件,调用与其绑定的每个函数。总结:

$(document).ready(function() { testingFunc.init(); }); 
// translation : Once the DOM has been initialized, call "init". 

关于你的代码,$('#object')试图查询DOM树找到与设置为“对象”(如<div id="object">)的ID的节点。但是,该文档可能尚未完全初始化。结果,这个查询可能会失败。为了避免这种风险,你应该宁可这样做:

var testingFunc = { 
    $object: null, 
    init: function() { 
     this.$object = $('#object'); 
     console.log(this.$object); 
    } 
} 

你可以把DOM作为一个文件夹结构,每个文件夹和文件是一个HTML标记。 jQuery以与浏览文件资源管理器相同的方式浏览DOM树。

1

代码中表示的这种特定样式是“对象文字”模式。它与“模块”模式仅略有不同,因为您发现自己不需要特定的属性或方法为专用模式。

在进入术语陷阱之前,您可能需要理解(原则上)JavaScript模式是什么,然后确定可能在架构上最适合您的项目的模式。

你可能会从这种迷你本书从阿迪·奥斯马尼的深入理解:从他

http://addyosmani.com/resources/essentialjsdesignpatterns/book/

和高层次的文章:

http://addyosmani.com/largescalejavascript/