我有这个代码:
function boo() {
this.is_global = "Yes!";
}
当我运行时boo();
,我有is_global
对象window
,我的意思是is_global
进入全局上下文。
我预计is_global
只有boo
功能。
这是正常行为吗?
我有这个代码:
function boo() {
this.is_global = "Yes!";
}
当我运行时boo();
,我有is_global
对象window
,我的意思是is_global
进入全局上下文。
我预计is_global
只有boo
功能。
这是正常行为吗?
是的,这是正常行为。如果您的函数是全局定义的,那么this
is justwindow
并且添加的任何内容window
都是全局的。
this
指窗户。如果要引用该函数,请使用:
arguments.callee.is_global = "Yes!";
现在:
window.is_global; //undefined
boo.is_global; //"Yes!"
另一种方法是在向 boo 添加属性时简单地通过其自己的名称引用 boo。
function boo() {
boo.is_global = "Yes!";
}
请注意,这会修改原始boo
函数对象。如果您希望修改所有将其用作构造函数的结果实例,请在此处查看其他答案。boo
要this
成为“被调用的函数”,您必须将该函数作为对象构造函数调用(使用new
)。
var foo = new boo();
这将创建一个具有属性的实例。这不会在构造函数本身上创建属性。查看演示。boo
is_global
如果您不使用new
(或诸如 之类的方法apply
),this
则为“调用函数的对象”。由于在这种情况下没有对象,因此使用默认对象。在 Web 浏览器的上下文中,默认对象是window
. 所以:
var foo = boo();
是相同的
var foo = window.boo();
并且this
在window
里面boo
。
查看MDN 对this
关键字的介绍。
我猜你想声明一个局部变量,所以使用一个var
语句。