我很困惑为什么下面的代码会返回undefined
。如果您console.log(this)
,您将获得myObj对象而不是全局窗口对象。因此,'this'明确指向正确的对象来访问x和y的值,但它返回undefined。这是代码:
var myObj = {
takeTwoNums: function (x, y) {
console.log(this.x);
}
}
myObj.takeTwoNums(1, 2);
答案 0 :(得分:8)
在致电public static IQueryable<T> Include<T>(this DbSet<T> set, params Expression<Func<T, object>>[] includes)
where T : class
{
var result = set.AsQueryable();
if (includes != null)
{
foreach (var expression in includes)
{
result = result.Include(expression);
}
}
return result;
}
时,takeTwoNums
指的是this
引用的同一个对象。该对象没有myObj
属性。它有一个x
属性,以及它从takeTwoNums
继承的一些属性,例如Object.prototype
等,但没有toString
x.
是方法的参数。您只需将其引用为x
即可。调用该方法不会使x
引用具有参数作为属性的对象。
你可能会对此感到困惑:
this
在那个的情况下,因为我们使用了function Thingy(x) {
this.x = x;
}
// Then
var t = new Thingy(42);
,所以它创建了一个新对象,然后使用new
调用Thingy
来引用该新对象,我们< em>在其上创建了一个名为this
的属性,我们使用参数x
的值进行初始化。但这完全不仅仅是调用一个函数。
答案 1 :(得分:2)
您不需要使用this
。相反,试试这个:
var myObj = {
takeTwoNums: function (x, y) {
console.log(x);
}
}
myObj.takeTwoNums(1, 2);
答案 2 :(得分:1)
this
指的是该对象,因此使用this.x
您需要x
myObj
。换句话说,它正在寻找不存在的myObj.x
。
以下是对象中this
的小参考指南:
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