【问题标题】:Browserify context when setting a prototype self executing function with require使用 require 设置原型自执行函数时浏览器化上下文
【发布时间】:2016-04-05 06:18:55
【问题描述】:

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

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 中传递/保留上下文?

【问题讨论】:

    标签: javascript node.js browserify require


    【解决方案1】:

    问题与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.
    

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多