在jQuery Object Literal中将一个属性赋给另一个属性

kxxlusnw  于 2023-01-25  发布在  jQuery
关注(0)|答案(1)|浏览(99)

我正在将jQuery中现有的工作代码重构为jQuery插件。在原始代码中,我有几个变量用于存储设置。其中一个变量在另一个中引用:

var className = ".container";
var element   = `<div class="${className.slice(1)}"></div>`;

在插件代码中,我尝试做同样的事情,但在Object Literal中,当我引用“className”时,我得到了未定义的:

$.fn.pluginName = function (options) {

    var defaultSettings = {
        className: ".container",
        element:  function() {
            return `<div class="${this.className.slice(1)}"></div>`;
        };
    };

    var settings = $.extend({}, defaultSettings, options);
};
a8jjtwal

a8jjtwal1#

既然您已经说过不控制如何调用element函数,那么就不能在其中依赖this(除非您使用bind,但这里没有必要)。
我假设options可以覆盖defaultSettings.className,所以您不只是想使用defaultSettings而不是this
但是,您可以使用settings

$.fn.pluginName = function (options) {
    const defaultSettings = {
        className: ".container",
        element: () => {
            return `<div class="${settings.className.slice(1)}"></div>`;
        },
    };
    const settings = Object.assign({}, defaultSettings, options);
    // ...presumably more code here...
};

即使它在代码中位于const settings之上,也不会被 * 调用 *,直到settings被初始化为一个值。

相关问题