Javascript: 从另一个文件调用 D3 中的函数
Javascript: calling function within D3 from another file
我想在 d3.js 脚本中重写几个与布局之一相关的函数。当我将这些函数剪切并粘贴到单独的文件中并在 d3.js 之后加载它们时,可视化不再起作用,因为内部函数调用 d3.js 的内部函数。
d3.js:
!function() {
var d3 = { version: "3.5.17" };
function d3_funct() { return d3; } // this function is called in the other file
}();
chord.js:
d3.svg.chord() = function() {
var funct = d3_funct; // doesn't work
};
问题:
当 d3_funct
在另一个文件的立即执行的函数表达式中定义时,我如何在我的脚本 chord.js 中使用上述函数 d3_funct
?
选项:
- 直接编辑d3.js文件而不是拉出函数重写:(
- 重命名封闭的 d3 函数并使用 jQuery 将其加载到 chord.js.
我错过了什么吗?
所以,你的执行顺序应该是:
- 加载d3.js
- 加载您的自定义修改
- 加载其余代码
您的修改文件应该类似于:
function myBetterD3Funct () { ... }
d3.d3_funct = myBetterD3Funct;
以上是迄今为止最好的选择。非常清楚您在做什么,不需要您每次下载最新版本时都修改 d3.js 文件(因此允许您使用 d3 cdn 为您的用户提供 d3.js 服务) .
如果您不想覆盖 d3 全局函数本身,还有另一个选项。我警告您,以下内容可能不适用于所有情况,具体取决于您的 myBetterD3Funct
的复杂程度以及它需要在 d3
.
中访问的内容
function myBetterD3Funct () { ... }
myBetterD3Funct.apply(d3);
这样做是将函数的范围(在运行时)设置为全局 d3 对象。这将允许它使用 this
引用全局 d3
对象中的顶级属性。如下面的评论所述,代码中的许多函数和变量是 written to be private,因此您无法以任何方式访问它们(修改源代码除外)。
我想在 d3.js 脚本中重写几个与布局之一相关的函数。当我将这些函数剪切并粘贴到单独的文件中并在 d3.js 之后加载它们时,可视化不再起作用,因为内部函数调用 d3.js 的内部函数。
d3.js:
!function() {
var d3 = { version: "3.5.17" };
function d3_funct() { return d3; } // this function is called in the other file
}();
chord.js:
d3.svg.chord() = function() {
var funct = d3_funct; // doesn't work
};
问题:
当 d3_funct
在另一个文件的立即执行的函数表达式中定义时,我如何在我的脚本 chord.js 中使用上述函数 d3_funct
?
选项:
- 直接编辑d3.js文件而不是拉出函数重写:(
- 重命名封闭的 d3 函数并使用 jQuery 将其加载到 chord.js.
我错过了什么吗?
所以,你的执行顺序应该是:
- 加载d3.js
- 加载您的自定义修改
- 加载其余代码
您的修改文件应该类似于:
function myBetterD3Funct () { ... }
d3.d3_funct = myBetterD3Funct;
以上是迄今为止最好的选择。非常清楚您在做什么,不需要您每次下载最新版本时都修改 d3.js 文件(因此允许您使用 d3 cdn 为您的用户提供 d3.js 服务) .
如果您不想覆盖 d3 全局函数本身,还有另一个选项。我警告您,以下内容可能不适用于所有情况,具体取决于您的 myBetterD3Funct
的复杂程度以及它需要在 d3
.
function myBetterD3Funct () { ... }
myBetterD3Funct.apply(d3);
这样做是将函数的范围(在运行时)设置为全局 d3 对象。这将允许它使用 this
引用全局 d3
对象中的顶级属性。如下面的评论所述,代码中的许多函数和变量是 written to be private,因此您无法以任何方式访问它们(修改源代码除外)。