如何更改此$ .extend变量?

时间:2018-06-15 03:49:57

标签: jquery

我需要更改变量的值,但无法找到方法。这是一个非常大的脚本的缩写摘录,其中包含变量。

(function ($, window, document) {
"use strict";
    func1() {}
    func2() {}
    ...
        $.extend({
            something: function (options) {

            var self = this,
                var1,
                var2,
                **variable_I_want_to_modify**,
                var4,
                ...
        }, options),
    func8() {}
    func9() {**variable_I_want_to_modify** used in this function}
    ...
    });
})(jQuery, window, document);

实例化完成如下:

var myInstance = new $.something(..options..)

我在这里尝试了太多的方法。 任何指导都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我们无法回答您的特定问题,而不会看到您所说的无法显示的更多代码。您在评论中提到Simple JavaScript Inheritance by John Resig,这可能有助于您了解问题。

为了指出正确的方向,请考虑以下代码:

(function ($, window, document) { 

 //..... 

})(jQuery, window, document);

这称为闭包。问题是这个闭包在它内部创建了自己的范围。也就是说,在func9内部定义的方法只存在于那里,只能从那里调用。它们不会暴露于它周围的脚本重置(括号外)。这样做是为了避免命名冲突,以及其他可能也定义func9的脚本。

请注意,在闭包的底部/末尾,我们看到jQuery, window, document,我们想要传递给闭包的环境中有变量。

在结尾($, window, document)的顶部/开头,这是传入的变量,他们只是在将jQuery变量$传入时将其命名为 $.extend({ something: function (options) { //... }, options), 变量$.extend(使它更容易使用。

现在考虑以下代码来自闭包内部:

something

通过调用var myInstance = new $.something(..options..) ,代码将获取传入的jQuery对象并扩展,以添加方法Array(dictionary.values.joined()) 。这可以看作方法导出到外部世界。因为jQuery对象已经存在于主闭包的范围之外(记得我们传入了它),并且我们已经添加了一个方法,我们现在可以从闭包外部调用该方法,就像你显示的那样:

let dictionary: [Character: [String]] = ["E": ["espanol", "english"], "G": ["german", "greek"]]
let langs = Array(dictionary.values.joined())
print(langs) // ["german", "greek", "espanol", "english"]
这对你的问题意味着什么?

嗯,如果没有看到您无法显示的实际代码或文档,很难说。

基本上,这意味着您不能修改存在于闭包范围内的 variable_I_want_to_modify ,除非创建者从该闭包中公开一个方法,以某种方式允许您这样做。创作者很可能确实为您提供了一种方法来满足您的需求。也许你现在可以找到这种方法,更好地理解发生了什么。

相关问题