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

Popular posts from this blog

php - SPIP: From Tag directly to an article -

jquery - isAjaxRequest always return false -

ruby on rails - In a controller spec, how to find a specific tag in the generated view? -