Javascript:分配属性时'this'会发生变化吗?

时间:2010-05-23 23:49:55

标签: javascript

我知道'这个'可能是一个问题,当你不能很好地理解Javascript但是这个让我有些困惑。

var ControlTypes = {
    TextBox: function () {
        console.log(this);
        this.Name = "TextBox";
        console.log(this);
    }
}

ControlTypes.TextBox();

Firebug给出以下结果:

Object {}
Object { Name="TextBox"}

第一个对象是ControlTypes,第二个对象是Textbox。有人能解释一下这背后的行为吗?

2 个答案:

答案 0 :(得分:4)

var ControlTypes = {
    TextBox: function () {
        console.log(this);
        this.Name = "TextBox";
        console.log(this);
    }
}

ControlTypes.TextBox();

您可以通过JavaScript Object Literal定义变量ControlTypes。

成员函数定义为名为TextBox。

你有一个带有成员函数的对象。当该成员函数使用“this”关键字时,它指向成员函数的容器,您的对象为“ControlTypes”。

当你第一次使用console.log时,没有定义typeof(variable) != "function"的成员变量......

然后,您定义一个成员变量“Name”,因此下次调用console.log时,已定义Name。


顺便说一下,
您是否尝试实例化ControlTypes.TextBox对象?
目前,您在ControlTypes的上下文中运行TextBox函数,而不是在新对象中运行。

我认为你的意思是new ControlTypes.TextBox();

答案 1 :(得分:2)

console.log的输出在调用之间是不同的,因为您在调用之间进行了更改。就这么简单。