gpt4 book ai didi

javascript - 使用 require 设置原型(prototype)自执行函数时浏览器上下文

转载 作者:太空宇宙 更新时间:2023-11-04 02:18:41 25 4
gpt4 key购买 nike

我有一个像这样的“类”:

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

我想定义这样的原型(prototype):

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 中的上下文吗?

最佳答案

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

当你这样做时

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

您“需要”(导入...)“talk.js”中的代码,这是一个函数,您可以使用参数(选项)立即调用该函数,但没有任何上下文对象,因此使用默认值(窗口)。

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

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

如果您希望 talk 成为日志记录功能,只需在原型(prototype)中设置它而不调用它:

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

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

关于javascript - 使用 require 设置原型(prototype)自执行函数时浏览器上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34543672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com