Skip to main content

Things you may not know about Javascript Objects

Object Properties:

An Object is a non primitive data with collection of properties(key, value). Each property(key) of an Object has following configurable properties,
  1. value - value of the property. Default: undefined
  2. enumerable - if true, the property can be accessed using a for..in loop and Object.keys. Default: false
  3. writable - if true, the property value can be modified. Default: false
  4. get - defines a getter function. Default: undefined
  5. set - defines a setter function. Default: undefined
  6. configurable - if true, all the properties can be modified and deleted. Default: false
With Object.defineProperty and Object.defineProperties we can set the above configurable properties for an Object property(key).

With Object.getOwnPropertyDescriptor and Object.getOwnPropertyDescriptors we can get the above configurable properties associated with an Object property(key).

example:

var x = { a:1, b:2 };

Object.getOwnPropertyDescriptor(x, 'a'); 
// {value: 1, writable: true, enumerable: true, configurable: true} 

Object.freeze()

This method prevents an Object from,
  1. New Properties being added
  2. Modify existing properties
  3. Delete existing properties
  4. Configuring the object properties
But still the inner object properties can be modified. To deep freeze the whole object, we have to recursively freeze the non primitive values (Object).
So the property description for each property in an object will be,

writable: false
enumerable: true
configurable: false

example:

var x = {
a:1, 
b:2, 
c:{
d:3
}
};

var y = Object.freeze(x);
    
    Object.getOwnPropertyDescriptor(x, 'a'); //{value: 1, writable: false, enumerable: true, configurable: false}

x===y; //true

x.a; //1
x.a = 5; //silently fails. In strict mode - throws a TypeError
x.a; //1
x.m = 5; //silently fails. In strict mode - throws a TypeError
x.m; //undefined

x.c.d; //3
x.c.d = 5; //since it is not a primitive value, still it allows to modify internal properties of 'c'
x.c.d; //5

Object.defineProperty(x, 'n', { value: 10 }); //throws a TypeError
Object.defineProperty(x, 'a', { value: 20 }); //throws a TypeError

Object.isFrozen(x); //true
Object.isExtensible(x); //false

Object.seal()

This method prevents an Object from,
  1. New Properties being added
  2. Delete existing properties
  3. Configuring the object properties
It allows the value of an existing properties to be modified.
So the property description for each property in an object will be,

writable: true
enumerable: true
configurable: false

example:

var x = {
a:1, 
b:2, 
c:{
d:3
}
};

var y = Object.seal(x);

Object.getOwnPropertyDescriptor(x, 'a'); //{value: 1, writable: true, enumerable: true, configurable: false}

x===y; //true

x.a; //1
x.a = 5; //since it is writable. the value can be changed
x.a; //5

x.m = 5; //silently fails. In strict mode - throws a TypeError
x.m; //undefined

Object.defineProperty(x, 'n', { value: 10 }); //throws a TypeError
Object.defineProperty(x, 'a', { value: 20 }); //allows to modify value

x.a; //20

Object.isSealed(x); //true
Object.isExtensible(x); //false

Popular posts from this blog

2D Reflection

#include <stdio.h> #include <stdlib.h> #include<graphics.h> #include<conio.h> #include<math.h> void draw2d(int,int [],int [],int,int); void main() { int gd=DETECT,gm; int x[20],y[20],x1[20],y1[20],tx=0,ty=0,i,fs; initgraph(&gd,&gm,""); printf("No of sides : "); scanf("%d",&fs); printf("Co-ordinates : "); for(i=0;i<fs;i++) { printf("(x%d,y%d)",i,i); scanf("%d%d",&x[i],&y[i]); } draw2d(fs,x,y,tx,ty); printf("translation (x,y) : "); scanf("%d%d",&tx,&ty); while(1) { clrscr(); cleardevice(); printf("1. X Reflection\n\n2. Y Reflection\n\n3. Exit"); draw2d(fs,x,y,0,0); switch(getche()) { case '1': for(i=0;i<fs;i++) { x1[i]=(tx+((x[i]-tx)*cos(M_PI))-((y[i]-ty)*sin(M_PI))); y1[i]=y[i]; } break; case '2': for(i=0;i<fs;i++) { x1[i]=x[i]; y1[i]=(tx+((y[i]-ty)*cos(M_PI))+((x[i]-tx)*sin(M_PI))); } break; case '3': close…

Simple Animation Using C

Here i have used fillpoly function to draw the object body and used fillellipse function to draw tier.
animation is done by looping through the objects x & y position until user hits a key. Keypress event is achived  by using kbhit function. Smoothness of animation is controlled by delay function.

Change the delay values to change the animation speed

Source:

#include<stdio.h> #include<conio.h> #include<graphics.h> #include<dos.h> void main() { int gd=DETECT,gm,i=-300,j; int poly[16]={100,100,250,100,250,50,300,50,325,90,325,140,100,140,100,100}; int tpoly[16]={100,100,250,100,250,50,300,50,325,90,325,140,100,140,100,100}; initgraph(&gd,&gm,""); getch(); while(!kbhit()) { for(j=0;j<16;j+=2) { poly[j]=tpoly[j]+i; } fillpoly(8,poly); setfillstyle(5,7); bar(275+i,60,295+i,85); setfillstyle(5,8); fillellipse(140+i,140,20,20); fillellipse(280+i,140,20,20); setfillstyle(1,0); fillellipse(140+i,140,10,10); fillellipse(280+i,140,10,10); setcolor(…

Personal Diary - A Mini Project Written in Turbo C With Graphical Interface

A Simple Personal Diary written in Turbo C with Graphical User Interface

Features,
Birthday ReminderNotesAddress Book The main part of the project is UI

'GUI.h' header file includes texbox, message-box and more custom graphical functions 
' Dairy.h' header file includes functionality of Personal Dairy
' Dairyload.c' includes loadingscreen, login screen, installation check etc
'Dairy.c' - execution stats here