Javascript 闭包和 'this'

标签 javascript closures

我创建的对象有问题,看起来像这样:

var myObject = {

    AddChildRowEvents: function(row, p2) {
        if(document.attachEvent) {
            row.attachEvent('onclick', function(){this.DoSomething();});
        } else {
            row.addEventListener('click', function(){this.DoSomething();}, false);
        }
    },

    DoSomething: function() {
        this.SomethingElse(); //<-- Error here, object 'this' does not support this method.
    }
}

问题是,当我在“DoSomething”函数中时,“this”没有引用“myObject”,我做错了什么?

最佳答案

当函数被调用时,“this”指的是行。如果你想拥有这个对象,你可以这样做: ]

AddChildRowEvents: function(row, p2) {
    var theObj = this;
    if(document.attachEvent) {
         row.attachEvent('onclick', function(){theObj.DoSomething();});
    } else {
         row.addEventListener('click', function(){theObj.DoSomething();}, false);
    }
},

当函数被调用时,它可以访问函数定义时作用域中的变量 theOBj。

关于Javascript 闭包和 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/346015/

相关文章:

javascript - 使用 v-bind 将数据放入属性 href 中的标签 a (VUE.JS 2 + Laravel 5.3)

ios - 如何使用 indexesOfObjectsPassingTest : in Swift

javascript - 从 git 存储库构建手写笔

javascript - 获取 BLOB 的二进制内容

javascript - Jquery 模糊文本并在焦点上为空

ios - 将 ObjC block 转换为 Swift 闭包

javascript - 什么是自由变量?

javascript - 当 JS 闭包使用 block 作用域变量时会发生什么?

javascript - 如何在 Javascript 匿名函数中提供默认参数?

javascript - 在 ng-repeat 中,ng-click 不会更改 HTML 中的值