javascript - 将作用域绑定(bind)到函数调用之外的函数

标签 javascript jquery oop

一个例子:

var MyClass = (function () {
    function MyClass() {
        // construct
    }

    MyClass.prototype.clickEvent = function() {
        this.doSomething();
    };

    MyClass.prototype.doSomething = function() {
        // do something here
    };

    return MyClass;
})();

var mc = new MyClass();
$('my-ele').click(mc.clickEvent.bind(mc));

我需要将 mc 绑定(bind)到 mc.clickEvent 才能使其工作。还有其他方法可以做到这一点吗?它工作得很好,只是如果有一种方法可以定义我的 clickEvent() 函数的范围,而无需在设置点击事件函数时附加 .bind(mc) ,那就太好了。

我看到了这样的事情:

MyClass.prototype.clickEvent = function() {
    this.doSomething();
}.bind(this);

但这没有用。

最佳答案

var MyClass = (function () {
    function MyClass() {
      this.clickEvent = this.clickEvent.bind(this);
    }

    MyClass.prototype.clickEvent = function() {
      this.doSomething();
    };

    MyClass.prototype.doSomething = function() {
        alert('something');
    };

    return MyClass;
})();

var mc = new MyClass();
$('.my-ele').click(mc.clickEvent);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<a href=#" class="my-ele">test</a>

这样做是为了绑定(bind)它的所有类方法。

function MyClass() {
    for (var i in this) {
        if (typeof this[i] === 'function') {
          this[i] = this[i].bind(this);   
        }
    }
}

关于javascript - 将作用域绑定(bind)到函数调用之外的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30009120/

相关文章:

javascript - 如何在AngularJS中全屏显示谷歌地图

javascript - React JS 路由无法正常工作

javascript - 使用 WebCrypto API 进行渐进式加密/解密?

javascript - TimePicker Razor ASP.NET-MVC

c# - 为什么在构造函数之前调用类的成员方法

javascript - 迭代元素列表并根据内部文本删除它们上的光标样式

jquery - 如何使用 jquery 确定 <ul> 的子元素?

php在if else语句中发布数据

c++ - 一个类应该能够输出其内容还是另一个类应该这样做?

java - 用于访问 volatile 实例变量的局部变量