【问题标题】:How to create a wrapper class for node.js plugin如何为 node.js 插件创建包装类
【发布时间】:2020-05-24 01:05:29
【问题描述】:

所以我是 JavaScript 新手,并且有一个使用 Node.js cookies module found here. 的项目,我已经能够创建 cookie 并像这样正确设置它们:

this.Vue.$cookies.set('cookieName', cookieValue, {
          sameSite: 'lax',
          secure: true
});

但是,我想创建一个包装函数/类,这样我就可以将 sameSite: 'lax'secure: true 选项设置为默认值,而不必每次从该模块调用 set 函数时都传递它们。显然,如果我愿意,我也希望能够将这些选项覆盖为其他内容。

查看我在其他地方找到的示例,我认为该类应该模糊地看起来像这样:

const cookies = require('cookie-universal-nuxt');

cookies(function ($) {

    const defaultOptions = {
        sameSite: 'lax',
        secure: true
    };

    return {
        get: function(name, options) {
            return $.cookies(name, options)
        },

        set: function (name, value, options) {
            $.cookies(name, value, // somehow options & defaultOptions are passed in and merged here)
        },
    };
});

但是,这可能是完全错误的。就像我说的,我是 JS 的新手,所以我很迷茫。任何帮助将不胜感激!

【问题讨论】:

    标签: javascript node.js vue.js wrapper nuxt.js


    【解决方案1】:

    我认为您不需要为此创建一个类 - 一个简单的包装函数可能会满足您的需求。以下是如何创建一个小工厂函数来创建绑定到特定上下文的包装器:

    function makeSetCookie($) {
      return function(name, value, options) {
        const defaultOptions = {
          sameSite: 'lax',
          secure: true
        }; 
    
        $.set(name, value, Object.assign(defaultOptions, options));
     }
    }
    
    const setCookie = makeSetCookie(this.Vue /* or whatever */);
    // and now you can use setCookie wherever
    

    调用者可以传递或不传递options 参数的值。 Object.assign(defaultOptions, options) 行将所有键/值从 options 复制到 defaultOptions,如果它们出现在 options 中,则覆盖 defaultOptions(相同站点,安全)中的任何键。如果 options 为 null 或未定义,那很好 - 返回的值将只是 defaultOptions。更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

    【讨论】:

    • 我很欣赏这个建议,但我应该更清楚地说明我想保持方法非静态。我调用它们的上下文/对象并不总是完全是this.Vue,我不想将参数传递给指定上下文的静态函数。我想要的东西就像我最初问的那样,$ 将代表调用该方法的上下文。
    • 这将无法正常工作,因为this.Vue.$cookiesthis 的值在setCookie() 函数中不正确。
    • 对其进行了编辑以反映评论中给出的要求。希望这有帮助!
    猜你喜欢
    • 2011-01-07
    • 2017-04-11
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多