Javascript 在这个工厂使用原型和静态方法的目的是什么?
我真的不明白本在下面的链接中编写的“预加载工厂”(AngularJS)中使用“静态方法”和“实例方法(原型)”的主要目的 我知道原型和构造器是如何工作的,但我从未见过像这样的函数的实际操作。为什么不把所有的代码放在一个函数中而不使用原型和静态方法呢 有人能帮我理解这一点吗 谢谢Javascript 在这个工厂使用原型和静态方法的目的是什么?,javascript,angularjs,prototype,Javascript,Angularjs,Prototype,我真的不明白本在下面的链接中编写的“预加载工厂”(AngularJS)中使用“静态方法”和“实例方法(原型)”的主要目的 我知道原型和构造器是如何工作的,但我从未见过像这样的函数的实际操作。为什么不把所有的代码放在一个函数中而不使用原型和静态方法呢 有人能帮我理解这一点吗 谢谢 app.factory( "preloader", function( $q, $rootScope ) { function Preloader( image
app.factory(
"preloader",
function( $q, $rootScope ) {
function Preloader( imageLocations ) {
// All the initial variables, deferred and promise here.
}
// ---
// STATIC METHODS.
// ---
Preloader.preloadImages = function( imageLocations ) {
var preloader = new Preloader( imageLocations );
return( preloader.load() );
};
// ---
// INSTANCE METHODS.
// ---
Preloader.prototype = {
// public methods and private methods here
};
return( Preloader );
}
);
你是对的,你不必使用原型模式来实现这一点。然而,这样做可以为您提供一个可靠的设计模式,可以很好地应用于这个特定的(以及大多数其他的)。另外,当将预加载到这样的类中时,现在将其提取到库中并在其他项目中使用(如果您愿意)会变得容易得多
因此,让我们深入了解为什么要使用构造函数、静态方法和实例方法(在原型中)。答案涉及到对经典的理解,而不是这个特殊的例子
预加载图像
静态方法:静态方法在所有对象之间共享,这意味着它用于执行您可能要为类预加载程序
创建的所有对象所共有的任务。在这种情况下,静态方法“preload images”只是创建它自己类的一个新实例,将要加载的所有图像位置传递给它,然后返回一个promise
,该方法可用于跟踪是否加载了所有图像
this
:作者在构造函数中创建并分配给this
的任何属性基本上都是实例变量,每个对象都是唯一的
function Preloader( imageLocations ) {
....
// I keep track of the current state of the preloader.
this.state = this.states.PENDING;
....
}
prototype
:在JavaScript中,添加到“prototype”对象的任何函数都是实例方法,这意味着它们分别作用于调用它们的对象。原型方法通常可以访问这个
对象,使用它可以创建、修改或返回实例变量。
例如,作者添加到原型中的方法是检查类的预加载
的this.state
,并返回它,以便在应用程序中使用
Preloader.prototype = {
isInitiated: function isInitiated() {
return( this.state !== this.states.PENDING );
}
}
那么为什么要将预加载程序变成一个类呢?毕竟,它的静态方法是调用自己的控制器并只创建一个对象
一开始似乎有悖常理。但当您考虑如何在典型应用程序上使用图像预加载程序时,它确实是有意义的。通常,您希望在页面或应用程序中的多组图像上使用预加载程序。另外,angular中的工厂
返回一个单例
,预加载程序现在符合这些标准
要做到这一点,作者不必重复代码,只需创建另一个预加载程序并开始使用它。它现在是自给自足的。提供进度报告,告知何时完成等 可能是因为静态方法用于形成角度模块,用户将使用实例方法..很好!谢谢你的回复。这一切都有道理。我有一件事我不明白你在下面的句子中说的“控制器”这个词。“毕竟它的静态方法是调用自己的控制器,只创建一个对象!”这是什么?