在定义原型函数时如何绑定它?

时间:2016-11-14 16:01:58

标签: javascript

让我说我有

function cookie(a, b) {
    this.a = a;
    this.b = b;

    this.sayA = function() {
        alert(this.a);
    }.bind(this);
}

cookie.prototype.sayB = function() {
    alert(this.b);
}

var nc = new cookie(1, 2);

addEventListener("load", nc.sayA);
addEventListener("load", nc.sayB);

所以,sayA找到了我想要的上下文,因为它绑定到了持有它的对象,但是B虽然没有任何线索。 如何将“this”绑定到我在对象原型中定义的函数?

3 个答案:

答案 0 :(得分:0)

这里有2个选项

  1. 显式绑定到实例
  2. 只需调用成员函数
  3. table {
      background-color: #646569;
      color: #ffffff;
      border-radius: 4px;
    }
    
    .table {
      margin-bottom: 20px;
    }
    

答案 1 :(得分:0)

你不能。

定义函数时,要绑定它的对象不存在。

当你调用该函数时,它已经从函数中分离出来并作为参数传递。

你可以:

  1. 在构造函数中绑定它
  2. 通过时将其绑定

答案 2 :(得分:0)

你几乎肯定不想这样做:

function cookie(a, b) {
    this.a = a;
    this.b = b;
    Object.getPrototypeOf(this).sayB = sayB.bind(this);   
}

function sayB() {
    alert(this.b);
}

var c1 = new cookie(null, 'from c1');
var c2 = new cookie(null, 'from c2');

c1.sayB(); // "from c2"
c2.sayB(); // "from c2" (i.e. both from c2)

创建的每个cookie都会覆盖原型链上的函数,这不是您想要的(可能)。