我需要更改变量的值,但无法找到方法。这是一个非常大的脚本的缩写摘录,其中包含变量。
(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..)
我在这里尝试了太多的方法。 任何指导都表示赞赏。
答案 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 ,除非创建者从该闭包中公开一个方法,以某种方式允许您这样做。创作者很可能确实为您提供了一种方法来满足您的需求。也许你现在可以找到这种方法,更好地理解发生了什么。