我对 Javascript 还比较陌生,并且一直在尝试了解特定库如何管理这种干净的类型和命名约定。
有问题的库是Telerik 的 Kendo UI,特别是我很好奇他们如何实现让我想起 C# 命名空间的东西。例如...有一种称为ObservableArray的类型,可以通过kendo.ui.ObservableArray访问。
我深入研究了源代码,对发生的事情感到非常困惑。由于专有原因,我省略了很多代码,但一般关闭不应该成为问题。我想知道是否有人可以帮助我了解他们如何实现其中的一些...
(function ($, evil, undefined) {
var kendo = window.kendo = window.kendo || { cultures: {} },
extend = $.extend,
each = $.each; // more code omitted
function Class() { }
Class.extend = function (proto) {
// most of this code omitted
return subclass;
};
// more code omitted
})(jQuery, eval); // this line is really confusing me
特别是,让我难以置信的是第二条线。他们在哪里声明一个变量(剑道)等于在window上定义的一个变量。我已经搜索了几个小时和几个小时,但我一生都无法弄清楚这首先发生在哪里。我无法在自己的代码中重现相同的行为。
我发现扩展函数可以作为一种将对象与现有对象配对的方法,并像可访问成员一样有选择地附加它。但是那个window.kendo的东西,它让我发疯。