Javascript:分配属性时“this”会发生更改吗?
我知道当你不太理解Javascript时,“这”可能是个问题,但这一点让我有点困惑Javascript:分配属性时“this”会发生更改吗?,javascript,Javascript,我知道当你不太理解Javascript时,“这”可能是个问题,但这一点让我有点困惑 var ControlTypes = { TextBox: function () { console.log(this); this.Name = "TextBox"; console.log(this); } } ControlTypes.TextBox(); Firebug给出以下结果: Object {} Object { Name="T
var ControlTypes = {
TextBox: function () {
console.log(this);
this.Name = "TextBox";
console.log(this);
}
}
ControlTypes.TextBox();
Firebug给出以下结果:
Object {}
Object { Name="TextBox"}
第一个对象是ControlTypes,第二个对象是Textbox。有人能解释这背后的行为吗
var ControlTypes = {
TextBox: function () {
console.log(this);
this.Name = "TextBox";
console.log(this);
}
}
ControlTypes.TextBox();
通过JavaScript对象文本定义变量ControlTypes
已为命名TextBox定义成员函数
您有一个对象,带有一个成员函数。当该成员函数使用this关键字时,它指向成员函数的容器,即对象控件类型
首次使用console.log时,没有成员变量,其中typeofvariable!=函数已定义
然后,定义一个成员变量名,以便下次调用console.log时,该名称已被定义
顺便说一下,
您正在尝试实例化ControlTypes.TextBox对象吗?
当前,您正在ControlTypes的上下文中运行TextBox函数,而不是在新对象中
我想你指的是新的控件类型
通过JavaScript对象文本定义变量ControlTypes
已为命名TextBox定义成员函数
您有一个对象,带有一个成员函数。当该成员函数使用this关键字时,它指向成员函数的容器,即对象控件类型
首次使用console.log时,没有成员变量,其中typeofvariable!=函数已定义
然后,定义一个成员变量名,以便下次调用console.log时,该名称已被定义
顺便说一下,
您正在尝试实例化ControlTypes.TextBox对象吗?
当前,您正在ControlTypes的上下文中运行TextBox函数,而不是在新对象中
我想你指的是新的控件类型 console.log的输出在调用之间不同,因为您在调用之间更改了它。就这么简单。console.log的输出在调用之间是不同的,因为您在调用之间更改了它。就这么简单。这是一个JavaScript对象文本,而不是JSON。除此之外,JSON不允许函数。是的,我的代码中既有函数也有函数来查看结果,我想我在执行此操作时也把自己弄糊涂了。@Matthew,很好的捕获,修复了它@皮克尔斯,我不明白你刚才的意思。啊,对不起,我的意思是,在我的原始代码中,我确实实例化了对象,但因为结果让我困惑,我也尝试了,没有新的。我将把这标记为答案。你对new的评论给了我一些新的见解。不知道我现在是否应该给我的问题换一个标题,因为它有点错误。无论如何,谢谢你的回答。这是一个JavaScript对象文本,而不是JSON。除此之外,JSON不允许函数。是的,我的代码中既有函数也有函数来查看结果,我想我在执行此操作时也把自己弄糊涂了。@Matthew,很好的捕获,修复了它@皮克尔斯,我不明白你刚才的意思。啊,对不起,我的意思是,在我的原始代码中,我确实实例化了对象,但因为结果让我困惑,我也尝试了,没有新的。我将把这标记为答案。你对new的评论给了我一些新的见解。不知道我现在是否应该给我的问题换一个标题,因为它有点错误。无论如何,谢谢你的回答。