我看到 JavaScript 中某些对象的某些属性以双下划线开头。例如,__defineGetter__
或 __defineSetter__
或 __proto__
。
它是一个约定定义的 ECMAScript 规范吗?或者这可能只是开发者社区的一个约定?
最佳答案
这些属性由特定浏览器定义,不是由 ECMAScript 定义。
因此,name collision需要避免。如果他们调用属性 defineGetter
,那么就不能保证网站的代码没有定义同名的属性——这会导致很多问题。但是,附加两个下划线已成为定义浏览器特定属性的事实上的方式(因为某些网站不太可能使用该约定)。
您可能会注意到其他浏览器开始使用与其他浏览器相同的命名约定(例如使用 __proto__
),但这仍然不能在所有浏览器之间得到普遍保证(例如,IE 没有定义 __proto__ 属性
).
此外:使用两个下划线作为“系统定义”标识符(与程序员定义的标识符相对)的惯例可以追溯到很久以前,所以我不知道该惯例是什么时候“开始”的——至少是只要 C++(参见 http://en.wikipedia.org/wiki/Name_mangling#Simple_example)
关于javascript - 为什么有些属性名在 JavaScript 中以双下划线开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547293/