我有这段代码:
function boo() {
this.is_global = "Yes!";
}
当我运行boo();
时,我在is_global
对象中有window
,我的意思是is_global
进入全局范围。
我希望仅在is_global
函数中使用boo
。
这是正常行为吗?
答案 0 :(得分:5)
是的,这是正常行为。如果您的函数是全局定义的,this
只是window
,而window
添加的任何内容都是全局的。
答案 1 :(得分:2)
this
指的是窗口。如果要参考该功能,请使用:
arguments.callee.is_global = "Yes!";
现在:
window.is_global; //undefined
boo.is_global; //"Yes!"
另一种方法是在向其添加属性时简单地通过自己的名称引用boo。
function boo() {
boo.is_global = "Yes!";
}
请注意,这会修改原始boo
函数对象。如果您希望修改使用它作为构造函数而导致boo
的所有实例,请在此处查看其他答案。
答案 2 :(得分:1)
要让this
为“被调用的函数”,必须将该函数作为对象构造函数调用(使用new
)。
var foo = new boo();
这将创建boo
的实例,其属性为is_global
。这不会在构造函数本身上创建属性。 See a demo
如果您不使用new
(或apply
之类的方法),则this
是“调用该函数的对象”。由于在这种情况下没有对象,因此使用默认对象。在Web浏览器的上下文中,默认对象为window
。所以:
var foo = boo();
与
相同var foo = window.boo();
和this
window
位于boo
内。
答案 3 :(得分:1)
查看MDN's introduction to the this
keyword。
我想你想声明一个局部变量,所以使用var
statement。