Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从不同的.js文件中访问1.js源文件(jqTree)中的变量以重写方法_Javascript_Jquery_Jqtree - Fatal编程技术网

Javascript 从不同的.js文件中访问1.js源文件(jqTree)中的变量以重写方法

Javascript 从不同的.js文件中访问1.js源文件(jqTree)中的变量以重写方法,javascript,jquery,jqtree,Javascript,Jquery,Jqtree,(JS、jQuery和jqTree新增) 我正在尝试覆盖一个方法(JqTreeWidget.prototype.openNode),该方法来自一个.js文件(我自己的custom.js) 我读过。所以我尝试在方法上这样做,我想我被困在访问具有原始方法的变量上了(JqTreeWidget)。我认为挑战在于原始方法位于tree.jquery.js(源代码)中,它与我自己的另一个custom.js文件分离,我想在其中执行覆盖 这个问题的目标是允许我在我的custom.js中编写(将是这个问题的答案):

(JS、jQuery和jqTree新增)

我正在尝试覆盖一个方法(
JqTreeWidget.prototype.openNode
,该方法来自一个.js文件(我自己的
custom.js

我读过。所以我尝试在方法上这样做,我想我被困在访问具有原始方法的变量上了(
JqTreeWidget
)。我认为挑战在于原始方法位于
tree.jquery.js
(源代码)中,它与我自己的另一个
custom.js
文件分离,我想在其中执行覆盖

这个问题的目标是允许我在我的
custom.js
中编写(
将是这个问题的答案):

var originalMethod=;
//原始方法的重写
=功能(节点、幻灯片){
//我的代码我想在这里先发生
递归地更改存储高度(node,true);
//我的代码完成了,现在我准备调用原始方法
调用(此、节点、幻灯片);
}
我认为这将是进行覆盖的最非侵入性的方式,而不需要实际侵入
树.jquery.js
源代码

查看我的
custom.js
at
单独的source
tree.jquery.js
被添加到该代码笔的js设置中

如何(从我的
custom.js
文件中)访问源文件(
tree.jquery.js
)中的
JqTreeWidget
变量?
这可能吗?
JqTreeWidget
是否不在
tree.jquery.js
范围之外,或者它不是一个全局变量?我希望
treeContainer.tree.prototype
会有它,但到目前为止我还没有运气


谢谢

原型对象可通过以下方式获得:

jQuery.fn.tree("get_widget_class").prototype

注意,这不是任何jQuery插件的通用解决方案。这是由树插件显式实现的。

我发现了这个黑客解决方法。但由于这是一个黑客行为,我仍然希望找到这个问题的答案(因此请继续回答我在问题中提到的
,谢谢)

正如在这个问题中所述,目标涉及到在
custom.js
中外部覆盖
JqTreeWidget.prototype.openNode
(来自
tree.jquery.js
)。因此,递归地调用
changeancestorheights
(我的代码)和
JqTreeWidget.prototype.openNode
都将通过
custom.js
中的覆盖进行,并且根本不修改
tree.jquery.js
源代码

解决方法:

  • :

    
    递归地更改存储高度=1;
    

  • custom.js
    中,将globar变量设置为函数(我希望在
    JqTreeWidget.prototype.openNode
    之前调用的函数):

    window.changeancestorheight递归地=changeancestorheight递归地

  • 调用
    JqTreeWidget.prototype.openNode
    开头的全局变量引用函数(侵入
    tree.jquery.js
    ):

    JqTreeWidget.prototype.openNode=函数(节点,幻灯片){
    //我能想出的唯一办法是在这个方法的其余部分之前执行它
    //(custom.js中的全局变量引用函数)
    递归更改存储高度(node,true);
    
    //原始openNode代码的其余部分。。。
    }

  • 这将从
    tree.jquery.js
    中调用my code函数,而不是从
    custom.js
    中调用重写的方法由于全局变量和修改
    tree.jquery.js
    source,所以这是一个有问题的问题。


    这将暂时起作用,但希望能有一个像原问题中所述的不那么麻烦的解决方案。。。谢谢

    FWIW:从理论上讲,在定义它之前(因为我的custom.js是最后加载的),递归调用它会有更改存储高度的风险。但实际上,JqTreeWidget.prototype.openNode只在用户inut上调用。因此,当输入发生时,所有的js都将被加载,因为用户在输入之前必须看到加载的页面:)看起来这确实得到了原型对象,谢谢!请注意,参数“get_widget_class”并不打算被替换:请将其保留在中,并按原样使用此答案中的代码。(一开始我很困惑,以为我需要为我的树替换一个CSS选择器,事实并非如此)只是好奇:介意解释一下“.fn.tree(“get_widget_class”)”是如何工作的吗?或者您是否有这些方法的API参考?感谢
    jQuery。fn
    是所有jQuery插件注册其功能的地方。它基本上是所有jQuery对象的原型。通过读取
    tree.jquery.js
    文件,可以看到其余部分。我不知道它被记录在任何地方。很酷,谢谢。我猜在了解了所有这些之后,您可能已经通过文本搜索tree.jquery.js中的“fn”或“$.fn”来缩小了它的相关部分。从上面看,这是一个不错的代码。
    jQuery.fn.tree("get_widget_class").prototype