【问题标题】:Can a callback function that belongs to a JavaScript object prototype access the object members?属于 JavaScript 对象原型的回调函数可以访问对象成员吗?
【发布时间】:2011-06-14 16:43:14
【问题描述】:

属于 JavaScript 对象原型的回调函数如何访问对象成员? 回调不能被关闭,一切都必须定义如下:

function Obji(param){
   this.element = param;
}

Obji.prototype.func(){
   database.get("someKey",this.cb);
}

Obji.prototype.cb(){
   //here I would like to access this.element
}

【问题讨论】:

    标签: javascript prototype-programming serverside-javascript


    【解决方案1】:

    database.get("someKey",this.cb.bind(this));

    .bind, ES5 shim 用于旧版浏览器

    【讨论】:

      【解决方案2】:

      在 javascript 中,this 总是指向调用函数的对象,如果没有调用任何对象,则指向全局对象。你可以这样吗?

      Obji.prototype.func = function(){
         var ref = this;
         database.get("someKey", function(){ref.cb()});
      }
      

      【讨论】:

      • 您需要对该对象的引用。在 javascript 中,函数和分配给它的对象之间没有联系。因此,除非您可以走私参考,否则 f.i.通过闭包,没有办法做你想做的事。 this 从不指代函数被认为是其成员的对象,它总是指调用函数的对象。
      • @entonio 我不确定你是对还是错,这就是我问这个问题的原因,看来你错了,看看@Raynos 的回答
      • 不,我没看错。 bind 是最近引入的功能(即并非在所有浏览器中都可用),在这种情况下,它的作用与我向您建议的 function(){ref.cb()} 相同。哪些条件不允许您使用function(){ref.cb()},但允许使用bind
      • (IOW,调用 bind 确实会创建一个闭包。)
      • @entonio 绑定可以进行更多优化。除此之外,它是一样的。 (除了你可以咖喱绑定和设置上下文null
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2014-01-18
      • 2021-09-19
      • 2012-07-12
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多