1)Literal Notation
It's comma delimited list of 0 or more pairs of property names and values enclosed in curly braces
let car = {
mark: 'Toyota',
model: 'AE86',
drift: function(place){ //method
return 'car is drifting on the ' + place;
}
};
---------------------------------------------------------------------------------------------------------------------------------------------------
2)Object() constructor
The Object constructor creates an object wrapper for the given value
let car = new Object();
car.mark = 'Toyota';
car.model = 'AE86';
car.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
new Object('text')
gives us String object,
new Object(123)
gives us Number object and so on, anything other than null/undefined given to this constructor will create wrapper for that value___________
3)Constructor functions
Blueprint function to create any number of objects that are the same type and inherit the same functionality
function Car(mark, model, speed){
this.mark = mark;
this.model = model;
this.speed = speed;
}
Car.prototype.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
let car1 = new Car('Toyota', 'AE86', 240);
let car2 = new Car('Subaru', 'Impreza', 200);
this keyword is an object that owns the code but in this context it is meant to be the newly created object by this constructor
---------------------------------------------------------------------------------------------------------------------------------------------------
4)Object.create() method
let car = Object.create({});
car.mark = 'Toyota';
car.model = 'AE86';
car.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
giving null/undefined to
create
method will cause newly created object to have no prototype, which by default should be
Object.prototype
,
or alternatively you can use prototype of another constructor function
let car = Object.create(Car.prototype)
or object itself to set a new prototype of an object
let car = Object.create({prototype_property1: 'value1'})
you can also use
property descriptor
to assign properties more precisely as you desire
let car2 = Object.create({}, {
mark: {
value: 'Toyota'
writable: true // false by default
enumerable: true // false by default
configurable: true // false by default
},
model: {
value: 'AE86'
},
speed: {
value: 240
},
drift: {
value: function(place){
return this.mark+ ' is drifting on the ' + place;
}
},
})
---------------------------------------------------------------------------------------------------------------------------------------------------
5)ES6 class syntax
WARNING: ES6 features might not be available for older version of some browsers
class Car{
constructor(mark, model, speed){
this.mark = mark;
this.model = model;
this.speed = speed;
}
drift(place){
return this.mark+ ' is drifting on the ' + place;
}
}
this is basically the same as constructor function but the different syntax
---------------------------------------------------------------------------------------------------------------------------------------------------
6)singleton pattern
downside of this is that you can't create many instances and methods will repeat
let car = new function(){
this.mark = 'Toyota';
this.model = 'AE86';
this.speed = 240;
this.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
}