使用';这';JavaScript中的关键字

使用';这';JavaScript中的关键字,javascript,Javascript,我不明白为什么下面的代码会返回未定义的。如果console.log(this)您将获得myObj对象,而不是全局窗口对象。因此,“this”显然指向访问x和y值的正确对象,但它返回未定义的值。代码如下: var myObj = { takeTwoNums: function (x, y) { console.log(this.x); } } myObj.takeTwoNums(1, 2); 您不需要使用此。相反,请尝试以下方法: var myObj = {

我不明白为什么下面的代码会返回未定义的
。如果
console.log(this)
您将获得myObj对象,而不是全局窗口对象。因此,“this”显然指向访问x和y值的正确对象,但它返回未定义的值。代码如下:

var myObj = {
    takeTwoNums: function (x, y) {
        console.log(this.x);
    }
}
myObj.takeTwoNums(1, 2);

您不需要使用
。相反,请尝试以下方法:

var myObj = {
    takeTwoNums: function (x, y) {
        console.log(x);
    }
}
myObj.takeTwoNums(1, 2);

在对
takeTwoNums
的调用中,
引用的对象与
myObj
引用的对象相同。该对象没有
x
属性。它有一个
takeTwoNums
属性,以及它从
对象继承的两个属性。prototype
类似于
toString
等等,但没有
x.

x
是该方法的一个参数。您只需将其引用为
x
。调用该方法不会使
this
引用具有参数作为属性的对象

您可能会将其与以下内容混淆:

function Thingy(x) {
    this.x = x;
}

// Then
var t = new Thingy(42);

在这种情况下,因为我们使用了
new
,它创建了一个新对象,然后调用
Thingy
,其中
this
引用了该新对象,我们在其上创建了一个名为
x
的属性,并使用参数
x
的值初始化该属性。但这完全是另一回事,而不仅仅是调用函数。

指的是对象,因此通过使用
this.x
可以请求
myObj的
x
。换句话说,它正在寻找不存在的
myObj.x

以下是有关对象中此
的小参考指南:

var myObj = {
    myVal: 3,
    takeTwoNums: function (x, y) {
        console.log(x);
    },
    takeThisNum: function (x, y) {
        console.log(this.x);
    },
    getVal: function() {
        console.log(myVal);
    },
    realGetVal: function() {
        console.log(this.myVal);
    }
}
myObj.takeTwoNums(1, 2); // Logs 1
myObj.takeThisNum(1, 2); // Logs undefined
myObj.getVal(); // Logs undefined
myObj.realGetVal(); // Logs 3

myObj
没有
x
属性。您是想执行
console.log(x)
?是的,我知道
console.log(x)
将返回1。但是为什么
this.x
看不到
x
变量呢?因为在那里,
this.x
会引用
myObj
对象上的属性,而该属性不在那里<代码>此.x!==xok,这很有意义,所以问题是我试图访问一个对象构造中不存在的变量,因为它是一个只能从
myObj
对象外部传入的参数。因此,必须在对象中定义变量才能使用“this”关键字。类似这样的内容:
var myObj={x:1,takeTwoNums:function(){console.log(this.x);}}}myObj.takeTwoNums()
@Haloor:Right。在这一点上,我们称它为属性,而不是变量(或参数),但它基本上是一样的。