javascript - 现在和以后获取函数对象的最简单方法是使用原型(prototype)的方法是什么?

标签 javascript prototype this

在 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);

在我的控制台中,我看到了 baz , bing , window , window按此顺序记录的对象。

需要看到的最简单或“正常”的诡计是什么:

baz , bing , baz , bing使用 bar 中的“this-like”变量记录foo 原型(prototype)上的函数?

当我说“this-like”时,我的意思是,我可以在 bar() 中使用的变量访问对象,它是现在和以后的方法。

编辑:

进一步说明,我想避免在调用 bar() 时需要知道它将要使用 this因此我需要做类似 bind() 的事情.假设当我调用 bar()在 baz 或 bing 上,它是一个“黑匣子”。我想在不知道它如何工作的情况下将 bar() 作为 bing 或 baz 的方法调用,并且我希望 bar() 的内部结构知道它是哪个对象的方法。

最佳答案

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

这个:

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);

日志:

baz
bing
baz
bing

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

setTimeout(function() { baz.bar(); });
setTimeout(function() { bing.bar(); });

关于javascript - 现在和以后获取函数对象的最简单方法是使用原型(prototype)的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089895/

相关文章:

javascript - 如何将嵌套 map 假设为原型(prototype)?

javascript - 函数的自定义原型(prototype)链

javascript - 将原型(prototype)添加到现有对象

jquery - 如何将元素定义为 "this"

javascript - 使用 javascript 打印 Canvas 图像

javascript - multipleSelect() 在动态添加的 <select> 上无法正常工作

javascript - 除非在 URL 中提供参数,否则 IE8 AJAX GET setRequestHeaders 不起作用

javascript - 类型错误 : "Not a function" using "this" keyword in a function

JavaScript:如何创建将作为对象调用的函数,而不是将 "this"作为参数传递?

javascript - Waterline Sails JS 不起作用