Javascript:分配属性时“this”会发生更改吗?

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

我知道当你不太理解Javascript时,“这”可能是个问题,但这一点让我有点困惑

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的评论给了我一些新的见解。不知道我现在是否应该给我的问题换一个标题,因为它有点错误。无论如何,谢谢你的回答。