Javascript的"文档"对象可以用作变量吗?

Mod*_*ner 3 javascript variables dom document object

我想知道我是否可以添加到Javascript的document对象.喜欢:

var document = {
    name: "My Name"   
}
Run Code Online (Sandbox Code Playgroud)
  • 这在JavaScript中是否合法?
  • 如果是,它被认为是"良好做法",还是应该避免它?
  • 如果我将它定义为变量,那么它是否被视为唯一对象,而不是JS DOM对象?

我是JavaScript的新手,任何帮助将不胜感激.

编辑:

在评论中进行了一些对话并稍微考虑一下之后,我真的想知道我是否可以操作document变量并仍然可以document正常使用.

jAn*_*ndy 16

  • 是的,可以做到这一点
  • 不,不应该这样

document只是global/ windowobject的另一个属性.如果在范围内将其声明为形式参数或变量,则查找过程将首先在您声明它的范围内匹配该名称,因此它有点重叠.

无论如何,你不想这样做,为什么?对于您和正在查看代码的任何其他人来说,它会让您感到困惑.这是非常糟糕的做法.

其实,这就是为什么的原因 "先进"的javascript代码段/库与合拢开始功能范围

(function( window, document, undefined ) {
    // window will always reference the "window" object that got originally passed in
    // document will always reference the "document" object that got originally passed in
    // undefined will always reference the "undefined value" that got originally passed in
}( window, window.document ));
Run Code Online (Sandbox Code Playgroud)

..只是为了避免,这种混合效应.如果这样的闭包是在文件的最顶部开放的,那么它确保你引用其中的原始对象,以防一些天才有一个好主意覆盖/重叠它们.

结论:你当然可以自由选择自己的意愿变量的名字,但你真的不应该使用这样显赫的姓氏的名称等window,document,undefined等等原因显而易见.

  • 呵呵+1我第一次听说*混蛋效果*.我喜欢你的答案,这就是我想知道的. (4认同)

Jef*_*eff 6

你说你在做什么 - 添加到document对象 - 不是你的代码实际在做什么。

正在做的是重新定义 document. 如果要添加到其中,请使用以下命令:

document.name = "My Name"
Run Code Online (Sandbox Code Playgroud)

这样您仍然可以使用document. 但是,这通常仍然是不好的做法 - 您可以使用不同的对象而不是文档:

myObject = {name:"My Name"};
Run Code Online (Sandbox Code Playgroud)

然后myObject仍然是全球性的。修改document对象可能会产生不幸的副作用。