一般情況下,Javascript每次new一個物件就產生一個例項,例項指向不同的地址。就像如下:
(function(){ function Person(name){ this.name = name; } Person.prototype.work = function(){ console.log(this.name + " is working"); } var p1 = new Person("Darren"); p1.work(); var p2 = new Person("Jack"); p2.work(); }());
以上,每次new出一個Person物件都是不同的。
如何在Javascript中實現單例模式呢?
--在生成某各物件時先判斷是否存在。存在就不生成物件,不存在就生成物件。
(function(){ var PersonSingleton = (function(){ var instance; function init(){ return { name: 'Anonymous', work: function(){ console.log(this.name + ' working'); } }; } return { getInstance: function(){ if(!instantiated){ instantiated = init(); } return instantiated; } } })(); var p1 = PersonSingleton.getInstance(); p1.work(); var p2 = PersonSingleton.getInstance(); p2.work(); }());
以上,通過PsonSIngleton物件的getInstance方法得到的例項每次都是一樣的。