5.Javascript program to demostrate working of prototypal inheritance ,closure,callbacks,promises and sync/await // Prototypal Inheritance function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(`${this.name} makes a noise.`); }; function Dog(name) { Animal.call(this, name); // Call the parent constructor } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.speak = function() { console.log(`${this.name} barks.`); }; // Closure function createCounter() { let count = 0; // Private variable return { increment: function() { count++; return count; }, decrement: function() { count--; return count; }, getCount: function() { return count; } }; } // Callback function fetchData(callback) { setTimeout(() => { const data = { message: "Data fetched!" }; callback(data); }, 1000); } // Promise function fetchDataPromise() { return new Promise((resolve, reject) => { setTimeout(() => { const data = { message: "Data fetched with Promise!" }; resolve(data); }, 1000); }); } // Async/Await async function fetchDataAsync() { const data = await fetchDataPromise(); console.log(data.message); } // Demonstration function demo() { // Prototypal Inheritance const dog = new Dog('Buddy'); dog.speak(); // Output: Buddy barks. // Closure const counter = createCounter(); console.log(counter.increment()); // Output: 1 console.log(counter.increment()); // Output: 2 console.log(counter.decrement()); // Output: 1 console.log(counter.getCount()); // Output: 1 // Callback fetchData((data) => { console.log(data.message); // Output: Data fetched! }); // Promise fetchDataPromise().then((data) => { console.log(data.message); // Output: Data fetched with Promise! }); // Async/Await fetchDataAsync(); // Output: Data fetched with Promise! } // Run the demonstration demo();