Skip to content

Instantly share code, notes, and snippets.

@nidev
Created August 29, 2018 05:37
Show Gist options
  • Save nidev/7048cb095d9404e049b870e639f24529 to your computer and use it in GitHub Desktop.
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
/*
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