今天隨便玩了一道 CodeWar 的題。
題意大致就是你需要實現一個 Singleton
也就是單件模式的類,讓其下面代碼執行成功:
1 | var obj1 = new Singleton(); |
並且還有很重要的一點就是 Singleton
的對象的 instanceof
也得的確是 Singleton
才行。
我們猜想 new Singleton()
的結果,如果 Singleton
函數也就是這個類的構造函數沒返回值的話,直接會返回 this
,有返回值的話,那麼就是等於其返回值了。
我們碼下面的代碼看一下:
1 | var Singleton = function() { |
跑一遍之後我們的確發現了輸出的值就是:
1 | { foo: "bar" } |
於是我這麼做:
1 | var foo = {}; |
結果上面的幾個條件都符合了,不信大家可以自己輸出一遍看看。
但是——
這東西不是一個 Singleton
的實例,它只是一個簡單的 JSON
對象,所以還是無法通過。
答案有很多,CodeWar 上面每個人的解法都不一樣,但是歸根結底本質還是大同小異的。
就是第一次的時候先直接返回 this
,並且把 this
放在某個地方。以後每次來這裏創建的時候返回之前存好的 this
即可:
1 | var Singleton = function() { |
寫法很多,我這裏隨意挑幾個別人的答案吧。
1 | /** |
1 | /** |