使用 require 设置原型自执行函数时浏览上下文

Browserify context when setting a prototype self executing function with require

我有一个 "class" 像这样:

function Person(params) {
   this.params = params;
}

我想这样定义原型:

Person.prototype.talk = require("./talk.js")(options);

和内部 talk.js:

module.exports = exports = function(options) {

     console.log(this); // window here not person

     return {};
};

但在 talk.js 里面 this 不是指创建的新 Person 对象... 上下文是 window

这是必须做的,因为要求正在传递一些设置... 有什么方法可以传递/保留 talk.js 中的上下文吗?

问题与 require(...) 调用无关,它与调用导出函数的 whenhow 有关.

当你这样做时

Person.prototype.talk = require("./talk.js")(options);

你是 "requiring"(导入...)来自 "talk.js" 的代码,这是一个函数,你可以立即使用参数调用它(options),但是没有任何上下文对象,因此使用默认值 (window)。

你显然想要的是在函数内部有一个实例作为 this 可用,但在你调用它时,没有 Person class 的实例可用。

稍后在实例上调用 talk() 时,实例将作为 this 值存在。

如果你想让talk成为日志功能,只需在原型中设置它而不调用它:

Person.prototype.talk = require("./talk.js");

// later...
var p = new Person("some parameter");
p.talk("some option"); // <- this will log the instance.