我有一个"班级"像这样:
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中传递/保留上下文?
答案 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.