javascript - 当调用设置为静态方法的变量时,这是未定义的

标签 javascript this

var Test = (function() {
    return {
        someValue: 69,
        staticMethod: function(){
          return this.someValue;
        }
    }
}());

console.log(Test.staticMethod());

var doIt = Test.staticMethod
console.log(doIt())

输出:

69
undefined

预期:

69
69
<小时/>

为什么第二次调用的上下文中不存在this

演示:http://jsbin.com/kidefoniko/edit?js,console

最佳答案

doIt 引用了 staticMethod 所执行的相同函数:

function(){
   return this.someValue;
}

this 基本上是 . 之前的对象 对于此调用:Test.staticMethod() 它是 Test

但是这里:doIt()没有.,所以点之前没有对象。 在这种情况下,this 被分配给全局对象(如果不是在严格模式下)。全局对象(浏览器中的window)没有名为someValue的属性,因此undefined被注销。

关于javascript - 当调用设置为静态方法的变量时,这是未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36802686/

相关文章:

java - 子类使用 "this"调用父类(super class)方法

javascript - 激活容器类时触发内部类为 'this'

javascript - 表单不断提交使用错误返回

javascript - 在 React 应用程序中更改商店的路线

javascript - 将事件绑定(bind)到没有事件的 <label> 然后触发两次

javascript - Highcharts 中的鼠标悬停

javascript - 为什么我无法获取此文本输入的值?

javascript - 对于这个 J-Query 扩展文本区域来说,这是正确的 JS 吗? 'this' 也和 JS 中的 event.target 一样吗?

c++ - 将对象的 'this'指针更改为指向不同的对象

javascript - js ES6多态性中如何使用this和super