backbone.js 在Javascript中,这个下划线是什么意思?

chy5wohz  于 2022-11-10  发布在  Java
关注(0)|答案(7)|浏览(195)
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)为什么要使用下划线?

lrl1mhuk

lrl1mhuk1#

它意味着私有字段或私有方法。这些方法只供内部使用。
不应在类外部调用它们。
私有字段包含供内部使用的数据。
它们不应该从课堂之外(直接)读取或写入。

**注意:**请务必注意,仅向变量添加下划线并不能使其成为私有变量,这只是一种命名约定。

zf9nrax1

zf9nrax12#

据我所知,它通常用于表示私有变量(但实际上并不提供任何隐私,只是一种约定)。
在此简要讨论,但建议他们不要:http://javascript.crockford.com/code.html

2izufjch

2izufjch3#

当像_varname那样使用时,它只是变量名的一部分,没有JavaScript的含义。开发者用它来表示变量的含义或作用域。在这种情况下,它看起来像是告诉开发者这个变量应该是一个局部变量或私有变量。
需要注意的是,在这个例子中,使用_.varname表示一个变量或函数带有underscore.js库。也可以使用_varname表示一个变量包含一个下划线对象,类似地,在我们的办公室中,我们使用$varname表示一个变量包含一个Jquery对象。

2mbi3lxu

2mbi3lxu4#

它可能被用来标记内部/私有属性,就像在python中,在变量前面加上下划线是一种简单的方法,告诉开发人员变量是内部的,他们最好不要篡改它(如果他们这样做,即使是对相关库的一个小的更新也可能会破坏它)。

ou6hu8tu

ou6hu8tu5#

通常_用于告诉用户/程序员它是一个私有/受保护的变量。

jqjz2hbq

jqjz2hbq6#

这是一个小小的补充。正如已经回答的,这些是伪私有变量。但是,可以编写访问这些私有变量的伪公共函数。
我被一个同事的代码弄糊涂了,它实际上有这样的代码(但被埋在一个单独的库中很深):

class x { 
  constructor(id) {this._id = id} 
  get id() {return this._id}
}
let y = new x(3)

现在你有了y.idy._id,它们都可以工作并返回相同的值,但是如果你执行console.log(y),它只显示_id键。

xa9qqrwz

xa9qqrwz7#

如前所述,这是许多开发人员的一种习惯,而且是一种糟糕的习惯。如果你必须在编程方法中求助于这样的约定,那么你应该在尝试使用这种语言之前学习这种语言、方法和模式。如果有人在不使用“下划线”的情况下无法区分代码中的公共/私有方法,那么你的文档技巧是极其缺乏的。Web上的许多公共项目的文档都非常糟糕,这可能就是为什么“下划线”约定被“接受”的原因大多数受教育程度不足的开发人员都使用了下划线,而其他人则决定随波逐流,而不是保留正式的设计模式和方法。ES6/7版本中没有写入“下划线”是有原因的。
在最近的一个博客中,我遇到了一位软件工程师经理,他说:“* 下划线的命名约定使我们一眼就能很容易地分辨出一个变量函数是公共的还是私有的。*"。我的回答是:“评论就像图片,在这种情况下,它们价值一千个下划线。
有一个叫做Doxygen的免费文档工具。虽然它并不专门支持JavaScript,但当你在注解中使用Doxygen前缀时,它可以为你的JavaScript应用程序生成专业的文档。如果你在代码注解中花点心思,创建带有文档的JavaScript应用程序对开发人员和用户来说都是非常简单的。
请记住,有一些工具可以删除“产品发布”的注解和控制台语句。也就是说,使用源代码Map也是浪费时间和资源。在准备发布之前不要缩小。例如,Dev Build(不缩小,保留注解和控制台语句),发布版本(移除注解和主控台陈述式,并缩小Dev组建。当Dev组建出版品质程式码时,不需要重新编译它,只要准备出版和部署即可)。

相关问题