javascript - 为什么有些属性名在 JavaScript 中以双下划线开头?

标签 javascript double-underscore

我看到 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/

相关文章:

php - php函数中的下划线

python - 为什么有些函数的函数名前后都有下划线 "__"?

javascript - 难以完成这个基于时间的代码片段

javascript - 为什么 typescript 编译器会在服务器启动时更改我的 tsconfig.json 文件?

javascript - 使用高级自定义字段插件和转发器字段在 Wordpress 中制作幻灯片

javascript - 用于提交事件的 addEventListener 尽早运行处理函数

javascript - 为什么我的行设置为可见后不可见?

python - 导入 __module__ python : why the underscores?