[笔记二]Essential JavaScript Design Patterns For Beginners
二、构造模式
利用prototype来构造自己的函数。
function Car(model,year,miles){ this.model = model; this.year = year; this.miles = miles; } Car.prototype.toString = function(){ return this.model + " has done " + this.miles + " miles"; }; var civic = new Car("Honda Civic",2009,20000); var mondeo = new Car("Ford Mondeo",2010,5000); console.log(civic.toString());
结果:
Honda Civic has done 20000 miles
一个简单的toString()方法将在所有的Car对象之间共用。
善用构造函数,用来简单的区分它们与其他的函数
三、单体模式
在传统的软件工程中,通过创建有一个方法的类来创建类的实例,实现单体模式。使用JavaScript,单体作为一个命名空间提供与全局命名空间隔离的实现代码,从而提供一个功能单一的访问点。
在JS中最简单的一种形式就是——一个对象直接量与它相关的方法和属性。如下:
var mySingeton = { prototype1: "something", prototype2: "something else", method1: function(){ console.log('hello world'); } }
如果你想进一步的扩展,你可以通过封闭变量和函数增加自己的私有成员和方法。只暴露那些你想公有的部分。例如:
var mySingleton = function(){ /** * here are my private variables and method * */ var privateVariable = "something private"; function showPrivate(){ console.log(privateVariable); } /** * public variables and methods (which can access private variables and methods) * */ return { publicMethod: function(){ showPrivate(); }, publicVar:"the public can see this!" } } var single = mySingleton(); single.publicMethod(); console.log(single.publicVar);
结果:
something private the public can see this!
上面的代码不错了。但是让我们进一步来考虑,如果你只想在当它需要的时候才实例化它这种情况。为了节约资源,你可以把实例化的代码放在另外一个构造函数中,如下:
var Singleton = (function(){ var instantiated; function init(){ /*singleton code here*/ return{ publicMethod: function(){ console.log('hello world') }, publicProperty:'test' } } return { getInstance: function(){ if(!instantiated){ instantiated = init(); } return instantiated; } } })() /*calling public methods is then as easy as:*/ Singleton.getInstance().publicMethod();
结果:
hello world
在实践中,单体模式有什么用处吗?当需要一个对象来协调整个系统的时候,单体是很有用的。最后一个关于单体的例子:
var SingletonTester = (function(){ function Singleton(args){ var args = args || {}; this.name = 'SingletonTester'; this.pointX = args.pointX || 6; this.pointY = args.pointY || 10; } var instance; var _static = { name: 'SingletonTestet', getInstance: function(args){ if(instance === undefined){ instance = new Singleton(args); } return instance; } }; return _static; })(); var singletonTest = SingletonTester.getInstance({pointX:5}); console.log(singletonTest.pointX);
结果:
5
相关推荐
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22