var Gallery = Backbone.Controller.extend({
_index: null,
_photos: null,
_album :null,
_subalbums:null,
_subphotos:null,
_data:null,
_photosview:null,
_currentsub:null,
routes: {
"": "index",
"subalbum/:id": "subindex",
"subalbum/:id/" : "directphoto",
"subalbum/:id/:num" : "hashphoto"
},
initialize: function(options) {
var ws = this;
if (this._index === null){
$.ajax({
url: 'data/album1.json',
dataType: 'json',
data: {},
success: function(data) {
ws._data = data;
ws._photos =
new PhotoCollection(data);
ws._index =
new IndexView({model: ws._photos});
Backbone.history.loadUrl();
}
});
return this;
}
return this;
},
//Handle rendering the initial view for the
//application
index: function() {
this._index.render();
},
我正在这里阅读关于backbone.js的教程:http://addyosmani.com/blog/building-spas-jquerys-best-friends/
什么是下划线? (_index,_photos,_album)为什么要使用它们?
答案 0 :(得分:145)
它表示私有字段或私有方法。仅供内部使用的方法。
不应该在课堂外调用它们。
私人字段包含供内部使用的数据。
不应该从课堂外(直接)读取或写入它们。
非常重要的是要注意,只是在变量中添加下划线并不会使其成为私有,它只是一个命名约定。
答案 1 :(得分:21)
据我所知,它通常用于表示私有变量(但实际上并不提供任何隐私,只是一种惯例)。
这里简要讨论过,但建议他们反对: http://javascript.crockford.com/code.html
答案 2 :(得分:8)
当像_varname
一样使用时,它只是变量名称的一部分,并且没有javascript含义。开发人员使用它来表示变量的含义或范围。在这种情况下,看起来它告诉开发人员这个变量应该是本地变量或私有变量。
需要注意的一些事项,在这个使用_.varname
的特定示例中,将使用underscore.js库表示变量或函数。也可以使用_varname
来表示包含下划线对象的变量,类似于我们的办公室,我们使用$varname
来表示包含Jquery对象的变量。
答案 3 :(得分:4)
它可能用于标记内部/私有属性。就像在python中添加带下划线的变量一样,这是告诉开发人员变量是内部变量的一种简单方法,他们最好不要篡改变量(如果他们这样做,即使对所涉及的库进行微小更新也可能会破坏事物)。 / p>
答案 4 :(得分:2)
通常_
用于告诉用户/程序员它是一个私有/受保护的变量。
答案 5 :(得分:0)
如前所述,这是许多开发人员的惯例,其中很糟糕。如果你必须在编程方法中使用这样的约定,那么在尝试使用该语言之前,你应该学习语言,方法和模式。如果某人无法区分代码中的公共/私人方法而不使用"下划线"那么您的文档技能就非常缺乏。网上的许多公共项目都记录得非常糟糕,这可能就是为什么"强调"约定被接受"受过大多数受过教育的开发人员,而其他人决定采用流程而不是保持正式的设计模式和方法。有一个原因,为什么"强调"没有写入ES6 / 7版本。
在博客中,我最近遇到了一位软件工程师经理,他说:" 下划线命名约定使得一目了然,变量函数是公开的还是私有的非常简单&#34 ;.我的回答是:"评论就像图片一样,在这种情况下,它们值得一千个下划线。
有一个名为Doxygen的免费文档工具。虽然它不专门支持JavaScript,但是当您在评论中使用Doxygen前缀时,它可以为您的JavaScript应用程序生成专业文档。使用文档创建JavaScript应用程序非常简单,对于开发人员和用户来说,当您在代码注释中付出一些努力时。
请记住,有些工具可以删除"生产版本"的注释和控制台语句。话虽这么说,使用源地图也浪费时间和资源。不要缩小,直到准备发布..即Dev Build(没有缩小,保留注释和控制台语句),Release Build(删除注释和控制台语句并缩小Dev构建。无需重新编译Dev Build时它的发布质量代码,只需准备发布并部署它。)
答案 6 :(得分:0)