var amir = new Object();
amir.test=22;
amir.family="askari";
console.log(amir.family);
console.log(amir['family']);
//askari
//askari
//we have some kind dynamic access to object
var field='family';
console.log(amir[field]);
//askari
var amir={};
console.log(typeof amir);
//object
var amir={
family:'askari',
birth:'1989'
};
console.log(amir.birth);
var amir={
work:[
{main:'programming'},
{type:'type1'}
]
};
console.log(amir.work[1]);
console.log(amir.work);
//{type: "type1"}
//(2) [{…}, {…}]....
var project = {name:'amir'};
console.log(project.foo);
//VM281:1 Uncaught TypeError: amir.ss is not a function
//there is a function called toString() on project, but we didnt, specify that, so where the toString lives? it's on the prototype
console.log(project.toString());
//{name: "amir"}
console.log(typeof Object.prototype);
// Object
console.log(typeof Object.prototype.toString());
// string
var project = {name:'amir'};
//its not that mean object havnt a prototype, we cant access to prototype
console.log(project.prototype);
//undefined
console.log(project.__proto__);
console.log(typeof project.__proto__);
//{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}....
//Object
var num={};
Object.defineProperty(num,'name',{
value: 'amir'
});
num.name='hasan';
console.log(num.name)
//amir
var num={};
Object.defineProperty(num,'name',{
value: 'amir',
writable: true
});
num.name='hasan';
console.log(num.name)
//hasan
var num={};
Object.defineProperty(num,'name',{
value: 'amir',
enumerable: true
});
num.name='hasan';
for(var f in num)
console.log(f)
//name
var num={};
Object.defineProperty(num,'name',{
value: 'amir',
enumerable: false
});
num.name='hasan';
for(var f in num)
console.log(f)
//undefined
var num={};
Object.defineProperty(num,'name',{
value: 'amir',
configurable: false
});
Object.defineProperty(num,'name',{
value: 'amir2'
});
console.log(num.name);
//Uncaught TypeError: Cannot redefine property: name
// at Function.defineProperty (<anonymous>)
// at <anonymous>:6:8
var num={};
Object.defineProperty(num,'name',{
value: 'amir',
configurable: false
});
Object.defineProperty(num,'name',{
value: 'amir2'
});
console.log(num.name);
//amir
var num={};
Object.defineProperty(num,'name',{
value: 'amir',
configurable: true
});
Object.defineProperty(num,'name',{
value: 'amir2'
});
console.log(num.name);
//amir2
Object.defineProperty(num,'getName',{
get:function(){
return this.name;
},
set: function(newValue){
this.name=newValue;
}
});
num.getName;
num.getName='hasan';
num.getName;
//amir
//amir
Object.defineProperties(num,{
'family':{
value:'askari',
writable:true
},
'age':{
value:18,
writable:true
}
})
var descriptor = Object.getOwnPropertyDescriptor(num,'name');
//{value: "amir", writable: false, enumerable: false, configurable: false}...
var obj={};
var obj2=Object.create(obj);
Object.defineProperties(obj,{
'name':{
value:'amir'
},
'age':{
value:30
}
});
console.log(obj.hasOwnProperty('name'));
console.log(obj2.hasOwnProperty('name'));
console.log(obj2.hasOwnProperty('toString'));
console.log(obj.__proto__.hasOwnProperty('toString'));
console.log(Object.prototype.isPrototypeOf(obj));
console.log(obj.isPrototypeOf(obj2))
console.log(Object.prototype.isPrototypeOf(obj2));
console.log(obj.__proto__.isPrototypeOf(obj2))
//true
//false
//false
//true
//true
//true
//true
//true
var obj={amir:'agha'};
var obj2=Object.create(obj);
console.log('amir' in obj2);
console.log('toString' in obj2);
console.log('amir' in obj.prototype);
//true
//true
//false