javascript - Overriding assignment operator in JS -
var myobject = {"mykey" : "myvalue"} typeof(myobject.mykey) returns `string` myobject.mykey = "newvalue" console.log(myobject.mykey) prints newvalue this expected behavior. but, similar value writes not work document.cookie
typeof(document.cookie) returns `string` but performing document.cookie = "value=123", appends document.cookie string rather set value value=123
so, how assignment document.cookie overridden?
document.cookie little magical, depending on browser constraints, use object.defineproperty define properties have different get , set behavior.
for example:
var obj = {}; object.defineproperty(obj, "data", { get: function() {return this.val; }, set: function(val) { this.val = json.stringify(val); } }); obj.data = {a:1}; // set object... console.log(obj.data) // retrieve string '{"a":1}' for example, similar cookie example, make function like:
var mixinextender = (function mixinextender(target) { var rawvalue = {}; object.defineproperty(target, "data", { get: function() { return json.stringify(rawvalue); }, set: function(val) { for(var key in val) { rawvalue[key] = val[key]; } } }); }) this mixin in data property extend setter value private object. getter return serialized version of it. use with:
var obj = {}; mixinextender(obj); obj.data = {a:1}; // add "a" key obj.data = {b:2}; // add "b" key console.log(obj.data) // > {"a":1,"b":2}
Comments
Post a Comment