Created
August 29, 2018 05:37
-
-
Save nidev/7048cb095d9404e049b870e639f24529 to your computer and use it in GitHub Desktop.
Mimicking behavior of document.cookie created by nidev - https://repl.it/@nidev/Mimicking-behavior-of-documentcookie
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
document.cookie 의 구현을 흉내내보자 | |
var wordJar = new WordJar(); | |
wordJar.cookie = "apple"; | |
// console.log(wordJar.cookie) -> "apple" | |
wordJar.cookie = "banana"; | |
// console.log(wordJar.cookie) -> "apple, banana" | |
wordJar.cookie = "kiwi"; | |
// console.log(wordJar.cookie) -> "apple, banana, kiwi" | |
wordJar.cookie = "!banana"; | |
// console.log(wordJar.cookie) -> "apple, kiwi" | |
*/ | |
function WordJar() { | |
// 실제 단어가 저장되는 자료구조 | |
var wordJar = []; | |
// 외부에 노출시킬 프로퍼티를 만들 객체 | |
var jarInterface = {}; | |
Object.defineProperty(jarInterface, "cookie", { | |
configurable: false, | |
enumerable: false, | |
get: function() { | |
return wordJar.join(", "); | |
}, | |
set: function(keyword) { | |
if (!keyword || typeof(keyword) !== "string") { | |
return undefined; | |
} | |
var command = "append"; | |
if (keyword[0] === "!") { | |
command = "remove"; | |
keyword = keyword.substring(1); | |
} | |
switch (command) { | |
case "append": | |
wordJar.push(keyword); | |
break; | |
case "remove": | |
if (wordJar.indexOf(keyword) > -1) { | |
wordJar.splice(wordJar.indexOf(keyword), 1); | |
} | |
break; | |
default: | |
throw "Unimplemented command: " + command; | |
} | |
return wordJar.join(", "); | |
} | |
}); | |
return jarInterface; | |
} | |
main(); function main() { | |
var wordJar = new WordJar(); | |
wordJar.cookie = "apple"; | |
console.log(wordJar.cookie);// -> "apple" | |
wordJar.cookie = "banana"; | |
console.log(wordJar.cookie);// -> "apple, banana" | |
wordJar.cookie = "kiwi"; | |
console.log(wordJar.cookie);// -> "apple, banana, kiwi" | |
wordJar.cookie = "!banana"; | |
console.log(wordJar.cookie);// -> "apple, kiwi" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment