我有这个代码:
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功能。
这是正常行为吗?
是的,这是正常行为。如果您的函数是全局定义的,那么thisis 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();
这将创建一个具有属性的实例。这不会在构造函数本身上创建属性。查看演示。boois_global
如果您不使用new(或诸如 之类的方法apply),this则为“调用函数的对象”。由于在这种情况下没有对象,因此使用默认对象。在 Web 浏览器的上下文中,默认对象是window. 所以:
var foo = boo();
是相同的
var foo = window.boo();
并且this在window里面boo。
查看MDN 对this关键字的介绍。
我猜你想声明一个局部变量,所以使用一个var语句。