我知道'这个'可能是一个问题,当你不能很好地理解Javascript但是这个让我有些困惑。
var ControlTypes = {
TextBox: function () {
console.log(this);
this.Name = "TextBox";
console.log(this);
}
}
ControlTypes.TextBox();
Firebug给出以下结果:
Object {}
Object { Name="TextBox"}
第一个对象是ControlTypes,第二个对象是Textbox。有人能解释一下这背后的行为吗?
答案 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
的输出在调用之间是不同的,因为您在调用之间进行了更改。就这么简单。