在JavaScript中使用'this'关键字

时间:2016-10-11 21:09:03

标签: javascript

我很困惑为什么下面的代码会返回undefined。如果您console.log(this),您将获得myObj对象而不是全局窗口对象。因此,'this'明确指向正确的对象来访问x和y的值,但它返回undefined。这是代码:

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

3 个答案:

答案 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