使用';这';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。在这一点上,我们称它为属性,而不是变量(或参数),但它基本上是一样的。