首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >现在和以后,用原型获取函数方法的对象的最简单方法是什么?

现在和以后,用原型获取函数方法的对象的最简单方法是什么?
EN

Stack Overflow用户
提问于 2013-06-13 22:38:40
回答 3查看 70关注 0票数 4

在JavaScript中,如果我有:

代码语言:javascript
复制
var foo = function(){}

foo.prototype.bar = function() {
    console.log(this);
}

baz = new foo();
baz.name = 'baz';

bing = new foo();
bing.name = 'bing';

baz.bar();
bing.bar();

setTimeout(baz.bar);
setTimeout(bing.bar);

在我的控制台中,我看到bazbingwindowwindow对象按照这个顺序被记录。

什么是最简单的,或“正常”的把戏,需要看到:

bazbingbazbingfoo原型的bar函数中使用"this-like“变量进行记录

当我说“类似于这个”时,我指的是一个变量,我可以在bar()中使用它来访问对象,它既是现在的方法,也是以后的方法。

编辑:

进一步澄清,当我调用bar()时,我想避免知道它想要使用this,因此我需要做一些类似bind()的事情。假设当我在baz或bing上调用bar()时,它是一个“黑盒”。我想调用bar()作为bing或baz的方法,而不知道它是如何工作的,并且我想让bar()的内部知道它是哪个对象的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-13 23:01:09

如果您不喜欢使用bind(),一种策略是在构造时将您的“绑定”方法附加到对象,“间接”引用this

这一点:

代码语言:javascript
复制
var foo = function(){
  var _this = this;
  this.bar = function() {
    console.log(_this);
  }
}


baz = new foo();
baz.name = 'baz';

bing = new foo();
bing.name = 'bing';

baz.bar();
bing.bar();

setTimeout(baz.bar);
setTimeout(bing.bar);

日志:

代码语言:javascript
复制
baz
bing
baz
bing

但一般来说,我喜欢在可能的情况下使用this,这样如果需要的话,我可以将我的方法apply()到其他对象。我只是将我的“延迟调用”封装在匿名函数中,假设它们使用this

代码语言:javascript
复制
setTimeout(function() { baz.bar(); });
setTimeout(function() { bing.bar(); });
票数 1
EN

Stack Overflow用户

发布于 2013-06-13 22:47:34

使用bind (尽管您可能需要在较旧的浏览器中填充它):

代码语言:javascript
复制
setTimeout(baz.bar.bind(baz));
setTimeout(bing.bar.bind(bing));
// btw,
//         baz.bar.bind(bing)
//         foo.prototype.bar.bind(bing)
// would have the same result
票数 1
EN

Stack Overflow用户

发布于 2014-11-24 21:16:35

这些天我经常做这样的事情是为了方便,没有花招,只是为了扩大范围:

代码语言:javascript
复制
function () {

function _this() {
  return window.myObject;
}

window.myObject = {
  myMethod: function myMethod() {
    _this().myOtherMethod();
  },

  myOtherMethod: function myOtherMethod() {

  }
}

}();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17089895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档