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

时间:2015-12-31 08:49:13

标签: javascript node.js browserify require

我有一个"班级"像这样:

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对象...... 上下文是窗口

这必须这样做,因为要求正在通过一些设置...... 有没有办法在talk.js中传递/保留上下文?

1 个答案:

答案 0 :(得分:0)

问题与require(...)调用无关,它与时的如何调用导出的函数有关。

当你这样做时

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

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

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

如果您稍后在某个实例上调用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.