0% found this document useful (0 votes)
8 views11 pages

JS Functions and Objects

Uploaded by

Zekariad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views11 pages

JS Functions and Objects

Uploaded by

Zekariad
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

Page 1 of 11

Table of Contents
1. JavaScript Functions
Nutshell (Beginner Level)

Professional Level

2. JavaScript Objects
Nutshell (Beginner Level)

Professional Level

1. JavaScript Functions — Deeper Dive


Function Types & Syntax

Parameters & Arguments

Closures — Key Concept

Function Scope & Hoisting

2. JavaScript Objects — Deeper Dive


Property Access & Manipulation

Object Methods & this

Prototypes and Inheritance

ES6 Classes — Syntactic Sugar Over Prototypes

Object Property Descriptors (Advanced)

Project: Simple To-Do List (Console-Based)


Step 1: Define a Task Object

Step 2: To-Do List Object to Manage Tasks

Step 3: Use the To-Do List

How this project covers your learning:


Page 2 of 11

explain me js functions and objects for nutshell and professional level

Got it! I'll explain JavaScript functions and objects in two levels:
1. Nutshell — simple, clear, beginner-friendly
2. Professional — deeper, with technical details and best practices

1. JavaScript Functions
Nutshell (Beginner Level)
A function is a block of reusable code that performs a specific task.
You define a function once and call (use) it whenever you want.
Functions can take inputs called parameters and can return a result.
Example:
js

function greet(name) {
return "Hello, " + name + "!";
}

console.log(greet("Zack")); // Output: Hello, Zack!

function greet(name) { ... } defines a function named greet with a parameter name .
return sends the output back.

You call the function by writing greet("Zack") .

Professional Level
Functions are first-class objects in JS — they can be assigned to variables, passed as
arguments, and returned from other functions.
JS supports several types of functions:
Function declarations (as above).
Function expressions: anonymous functions assigned to variables.
Arrow functions: concise syntax with lexical this binding.
Functions have their own execution context and scope chain.
Can use default parameters, rest parameters, closures.

Example:
js

// Arrow function with default and rest parameters


const sum = (a = 0, b = 0, ...rest) => {
let total = a + b;
for (const num of rest) {
total += num;
}
return total;
};
Page 3 of 11

console.log(sum(1, 2, 3, 4)); // Output: 10

Arrow functions don't have their own this , so they inherit it from the surrounding
context — great for callbacks.
Closures happen when a function remembers the environment where it was created,
allowing private variables and data encapsulation.

2. JavaScript Objects
Nutshell (Beginner Level)
An object is a collection of key-value pairs — like a dictionary or a real-world thing
with properties.
Properties describe the object, and values can be anything (numbers, strings,
functions, other objects).
You can access properties using dot . or bracket [] notation.

Example:
js

const person = {
name: "Zack",
age: 25,
greet: function() {
return "Hi, I'm " + this.name;
}
};

console.log(person.name); // Zack
console.log(person.greet()); // Hi, I'm Zack

this refers to the current object inside a method.

Professional Level
Objects are unordered collections of properties, where keys are strings or symbols.
Values can be any JS value, including functions (methods).
JS objects support prototypes for inheritance — an object can inherit properties from
another object via its prototype chain.
Can create objects via:
Object literals ( {} )
Constructor functions (using new )
Object.create() to set prototype explicitly

ES6 Classes (syntactic sugar over prototype pattern)

Example: Prototype & Class


js
Page 4 of 11

// Constructor function
function Person(name, age) {
this.name = name;
this.age = age;
}

Person.prototype.greet = function() {
return `Hello, I'm ${this.name}`;
};

const zack = new Person("Zack", 25);


console.log(zack.greet()); // Hello, I'm Zack

// ES6 Class
class Animal {
constructor(type) {
this.type = type;
}
speak() {
return `This ${this.type} makes a sound.`;
}
}

const dog = new Animal("dog");


console.log(dog.speak()); // This dog makes a sound.

Prototype allows method sharing to save memory (all instances share the same
method).
Classes simplify creating multiple objects with the same blueprint.
Objects also have descriptors (writable, enumerable, configurable) to control
behavior of properties.

If you want, I can dive deeper with examples, advanced concepts like closures, prototype
chain, or show you how to use objects & functions in real apps! Just ask.

go on

Great! Let's go deeper into JavaScript functions and objects with more detailed explanations,
examples, and advanced concepts.

1. JavaScript Functions — Deeper Dive


Function Types & Syntax
Function Declaration — hoisted, meaning you can call it before it's defined.
js
Page 5 of 11

sayHi();

function sayHi() {
console.log("Hi!");
}

Function Expression — stored in a variable, not hoisted.


js

const sayHello = function() {


console.log("Hello!");
};
sayHello();

Arrow Function — shorter syntax, no own this , no arguments object.


js

const add = (x, y) => x + y;


console.log(add(3, 4)); // 7

Parameters & Arguments


Default Parameters
js

function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5)); // 5

Rest Parameters — collect multiple args into an array.


js

function sumAll(...numbers) {
return numbers.reduce((acc, num) => acc + num, 0);
}
console.log(sumAll(1, 2, 3, 4)); // 10

Closures — Key Concept


Closure is when a function remembers the variables from its creation context, even
after that context has finished.

js

function outer() {
let count = 0;
return function inner() {
count++;
return count;
Page 6 of 11

};
}

const counter = outer();


console.log(counter()); // 1
console.log(counter()); // 2

Here, inner keeps access to count even after outer has finished.

Function Scope & Hoisting


Functions have their own scope for variables declared inside them.
Variables declared inside a function are not accessible outside (local scope).
Hoisting moves function declarations and variable declarations to the top of their
scope before execution.

2. JavaScript Objects — Deeper Dive


Property Access & Manipulation
js

const car = {
make: "Toyota",
model: "Corolla",
year: 2020,
};

console.log(car.make); // Toyota
console.log(car["model"]); // Corolla

car.year = 2021; // Update property


car.color = "red"; // Add new property

delete car.color; // Remove property

Object Methods & this


this inside an object method refers to the object itself.

js

const user = {
username: "Zack",
greet() {
return `Hello, ${this.username}!`;
}
};

console.log(user.greet()); // Hello, Zack!

Beware: If you extract the method, this may lose context.


Page 7 of 11

js

const greetFn = user.greet;


console.log(greetFn()); // undefined or error, because `this` is lost

Use bind to fix this:


js

const boundGreet = user.greet.bind(user);


console.log(boundGreet()); // Hello, Zack!

Prototypes and Inheritance


Every JS object has a prototype from which it inherits properties/methods.
js

const parent = {
greet() {
return "Hello from parent";
}
};

const child = Object.create(parent);


console.log(child.greet()); // Hello from parent

Changes to the prototype reflect in objects inheriting from it.

js

parent.sayBye = function() {
return "Bye!";
};

console.log(child.sayBye()); // Bye!

ES6 Classes — Syntactic Sugar Over Prototypes


Classes make creating object blueprints easier and cleaner.

js

class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `Hi, I'm ${this.name}`;
}
}
Page 8 of 11

const p1 = new Person("Zack", 25);


console.log(p1.greet()); // Hi, I'm Zack

You can extend classes:

js

class Employee extends Person {


constructor(name, age, job) {
super(name, age); // call parent constructor
this.job = job;
}
work() {
return `${this.name} is working as a ${this.job}`;
}
}

const emp = new Employee("Alice", 30, "Developer");


console.log(emp.greet()); // Hi, I'm Alice
console.log(emp.work()); // Alice is working as a Developer

Object Property Descriptors (Advanced)


You can define property behavior using Object.defineProperty .

js

const obj = {};


Object.defineProperty(obj, "secret", {
value: 42,
writable: false, // cannot change
enumerable: false, // hidden in loops
configurable: false // cannot delete or change descriptor
});

console.log(obj.secret); // 42
obj.secret = 100; // no effect

If you want, I can:


Show you practical coding exercises with functions and objects
Help you build a small project using these concepts
Explain async functions, callbacks, or ES6+ advanced function features
Or deep dive into prototype chains and inheritance patterns

Just say what you want next!

project
Page 9 of 11

Awesome! Let's build a small JavaScript project that uses functions and objects together so
you can practice and see how they work in real life.

Project: Simple To-Do List (Console-Based)


Goal:
Create a to-do list app that you can:
Add new tasks
Mark tasks as done
Remove tasks
List all tasks with their status (done or not)

Step 1: Define a Task Object


Each task will be an object with:

id (unique identifier)
description (task text)

completed (true/false)

js

function createTask(id, description) {


return {
id,
description,
completed: false,
};
}

Step 2: To-Do List Object to Manage Tasks


This object will have methods (functions) to:
Add a task
Complete a task
Remove a task
List all tasks

js

const todoList = {
tasks: [],

addTask(description) {
const id = this.tasks.length + 1;
const task = createTask(id, description);
this.tasks.push(task);
console.log(`Added task: "${description}"`);
},
Page 10 of 11

completeTask(id) {
const task = this.tasks.find(t => t.id === id);
if (task) {
task.completed = true;
console.log(`Task ${id} marked as completed.`);
} else {
console.log(`Task ${id} not found.`);
}
},

removeTask(id) {
const index = this.tasks.findIndex(t => t.id === id);
if (index !== -1) {
this.tasks.splice(index, 1);
console.log(`Task ${id} removed.`);
// Reassign IDs
this.tasks.forEach((t, i) => t.id = i + 1);
} else {
console.log(`Task ${id} not found.`);
}
},

listTasks() {
if (this.tasks.length === 0) {
console.log("No tasks in the list.");
return;
}
console.log("To-Do List:");
this.tasks.forEach(task => {
console.log(`${task.id}. [${task.completed ? "✓" : " "}] ${task.description}`);
});
}
};

Step 3: Use the To-Do List


Try running these commands in order in your JavaScript environment (browser console or
Node.js):

js

todoList.addTask("Learn JavaScript functions");


todoList.addTask("Build a to-do list project");
todoList.listTasks();

todoList.completeTask(1);
todoList.listTasks();

todoList.removeTask(2);
todoList.listTasks();

Expected output:
vbnet
Page 11 of 11

Added task: "Learn JavaScript functions"


Added task: "Build a to-do list project"
To-Do List:
1. [ ] Learn JavaScript functions
2. [ ] Build a to-do list project
Task 1 marked as completed.
To-Do List:
1. [✓] Learn JavaScript functions
2. [ ] Build a to-do list project
Task 2 removed.
To-Do List:
1. [✓] Learn JavaScript functions

How this project covers your learning:


Functions: createTask , and the methods inside todoList ( addTask , completeTask , etc.)
Objects: Each task is an object; todoList is an object managing tasks and using
methods.
this keyword inside methods to refer to the todoList object.
Array methods like find , findIndex , forEach combined with objects.

If you want, I can help you:


Add more features (edit task, clear completed, save to local storage)
Turn this into a web app with HTML/CSS and DOM manipulation
Explain any part in more detail

What do you want next?

You might also like