如果我通过按 F2 键在 IDEA intellij 中查找像 destroy()
这样的 javascript 函数的定义:
var myTable = $('#myList').dataTable({
columns: listHeader,
data: listBody
});
myTable.destroy();
我可以看到几个定义:
destroy in Chart.PluginBase (chart.bundle.js, static)
destroy in Chart.DatasetController (chart.bundle.js, static)
destroy in DataTable.defaults (jquery.dataTables.js, static)
destroy in u (angular-material.min.js, static)
destroy in v (angular-material.min.js, static)
destroy in r (angular-material.min.js, static)
如何强制使用所需的功能?
最佳答案
好吧,问问自己你的对象是什么类型,你就会得到答案。在第 1 行,您将 $('#myList').dataTable() 分配给您的 var,因此现在您的 var 正在继承 dataTable 对象的属性(包括函数属性)。因此,当您现在执行 myTable.destroy() 时,这将使用 dataTable#destroy(列表中的第 3 个)。
这是 prototypal inheritance 的一个特征示例.
编辑:关于你关于“我如何确定我的对象是什么类型”的问题......简而言之,它真的是“你不能”,无论如何都不可靠。 Javascript 根本不是一种静态类型的语言……它允许一些非常AWESOME 的东西。但是,如果您有兴趣,请查看 TypeScript
关于Javascript:如果有几种可能性,使用哪个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774868/