这是一个创建于 4175 天前的主题,其中的信息可能已经有所发展或是发生改变。
今天便玩了一道 CodeWar 的。
意大致就是你需要一 Singleton 也就是件模式的,其下面代行成功:
var obj1 = new Singleton();
var obj2 = new Singleton();
obj1 === obj2; // => true
obj1.test = 1;
obj2.test; // => 1
且有很重要的一就是 Singleton 的象的 instanceof 也得的是 Singleton 才行。
=== 始 ===
我猜想 new Singleton() 的果,如果 Singleton 函也就是的造函返回值的,直接返回 this,有返回值的,那就是等於其返回值了。
我下面的代看一下:
var Singleton = function() {
return { foo: "bar" };
};
console.log(new Singleton());
跑一遍之後我的了出的值就是:
{ foo: "bar" }
=== 小作弊失 ===
於是我做:
var foo = {};
var Singleton = function() {
return foo;
};
果上面的件都符合了,不信大家可以自己出一遍看看。
但是
西不是一 Singleton 的例,它只是一的 JSON 象,所以是法通。
=== 死月の正解 ===
答案有很多,CodeWar 上面每人的解法都不一,但是根底本是大同小的。
就是第一次的候先直接返回 this,且把 this 放在某地方。以後每次建的候返回之前存好的 this 即可:
var Singleton = function() {
if(Singleton.prototype.instance) return Singleton.prototype.instance = this;
// Do some initialize things
// ...
Singleton.prototype.instance = this;
return this;
};
=== 的法 ===
法很多,我意挑人的答案吧。
/**
* By tjwudi
*/
var Singleton = function(){
return Singleton.ins = Singleton.ins ? Singleton.ins : this;
};
/**
* By nonowarn
*/
var Singleton = (function () {
var instance = null;
return function(){
return instance || (instance = this);
};
})();
2 条回复 2014-10-04 13:03:52 +08:00  | | 2 magicdawn 2014 年 10 月 4 日 不是可以改proto吗
```js function Singleton () { return singleton_instance; } var singleton_instance = { __proto__ : Singleton.prototype };
var obj1 = new Singleton var obj2 = new Singleton
require('assert')(obj1 === obj2); require('assert')(obj1 instanceof Singleton); ``` |