Създаден от
Object = {properties + methods}
// пример за обект, съхраняващ информация за 1 студент::
let student1 = {
// properties:
"firstName" : "Pesho",
"surName" : "Petrov",
// methods
"greet": function() {
console.log(`Hello, I'm ${this.firstName}`);
}
};
// define student1 object:
let student1 = {
"firstName" : "Pesho",
"surName" : "Petrov",
"greet": function() {
console.log(`Hello, I'm ${this.firstName}`);
}
};
dictionary
(Python), associative array
(Perl, PHP, ...)
let dictionary = {
// съвкупност от 'key':'value' двойки
'apple': 'ябълка',
'banana': 'банан',
'orange': 'портокал'
}
// пример за обект, съхраняващ информация за 1 студент::
let student1 = {
// properties:
"name":"Pesho",
"address":{
"town":"Sofia",
"zip": 1508
}
"scores": [3,4,5],
// methods
"greet": function() {
console.log(`Hello, I'm ${this.name}`);
}
};
Ето как, съвсем обобщено, изглежда един обект в паметта:
const obj = {
propName1:propValue1,
propName2:propValue2,
...
propNameN:propValueN,
}
// създаване празен обект:
var obj = {};
// създаване на обект с 4 свойства (properties):
var car1 = {
"brand" : "ford",
"year" : 2016,
"color" : "red",
"doors" : 3
}
var obj = new Object();
var obj = new Car();
object_name.property_name
const developer1 = {
"firstName" : "Ivan",
"surName" : "Ivanov",
"skills" : ["HTML", "CSS", "JavaScript"],
"applyForJob": function(){
const skillsStr = this.skills.toString();
console.log(`Hi, I'm ${this.firstName} ${this.surName}. My strongest skills are ${skillsStr}.`);
}
}
console.log( developer1.firstName ); //Ivan
console.log( developer1.surName ); //Ivanov
console.log( developer1.skills );
// ["HTML", "CSS", "JavaScript"]
console.log( developer1.skills[0] ); //"HTML"
console.log( developer1.applyForJob() );
// Ivan is applying for job!
developer1.firstName = "Stoyan";
// промяна на свойството "firstName"
object_name[variable_holding_property_name]
const prices = {
'apples': 2.50,
'oranges': 3.45,
'bananas': 2.80
}
// името на пропъртито, което искаме да достъпим е дадено в променлива:
const fruitName = 'apples'
// използваме записът с квадратни скоби:
console.log( prices[fruitName] );
// следният запис е еквивалентен:
console.log( prices['apples'] ); // 2.50
console.log( prices.apples ); // 2.50
// естествено, предпочитаме да използваме вторият вариант
const fruitName = 'apples';
console.log( prices[fruitName] ); // 2.50
console.log( prices.fruitName ); // undefined, защото се търси пропърти с име 'fruitName' в обекта prices, а такова пропърти няма.
this
this
this
, в която имаме самия обект: student1this
, може да имаме различни обекти, но темата се разглежда по-подробно в курсовете на напреднали. Това, което е важно, е че когато използваме this в обект литерал (т.е. в {...}), то в this
винаги имаме същия този обект.
let student1 = {
// properties:
"name":"Pesho",
"address":{
"town":"Sofia",
"zip": 1508
},
"scores": [3,4,5],
// methods
"greet": function() {
console.log(`Hello, I'm ${this.name}. My max sore is: ${this.findMaxScore()}`);
},
"findMaxScore": function () {
let maxScore = 0;
for (let i = 0; i < this.scores.length; i++) {
const currentScore = this.scores[i];
if(currentScore>=maxScore){
maxScore=currentScore
}
}
return maxScore;
}
};
student1.greet()
this
да напишете student1
, но това не е добра практика, тъй като кода не би бил гъвкав и лесно преносим. Представете си, ако трябва да използвате методите greet()
и findMaxScore()
в други обекти...
var developer1 = {
"firstName" : "Ivan",
"surName" : "Ivanov",
"skills" : ["HTML", "CSS", "JavaScript"],
"applyForJob": function(){
var skillsStr = this.skills.toString();
console.log(`Hi, I'm ${this.firstName} ${this.surName}. My strongest skills are ${skillsStr}.`);
}
}
var developer2 = {
"firstName" : "Maria",
"surName" : "Mineva",
"skills" : ["Python", "Machine Learning", "Data Science"],
"applyForJob": function(){
var skillsStr = this.skills.toString();
console.log(`Hi, I'm ${this.firstName} ${this.surName}. My strongest skills are ${skillsStr}.`);
}
}
// функция, създаваща обекти от тип developer:
function developerFactory(firstName, surName, skills){
var obj = {};
obj.firstName = firstName;
obj.surName = surName;
obj.skills = skills;
obj.applyForJob = function(){
var skillsStr = this.skills.toString();
console.log(`Hi, I'm ${obj.firstName} ${obj.surName}. My strongest skills are ${skillsStr}.`);
}
return obj;
}
//сега лесно създаваме обектите от тип developer:
var developer1 = developerFactory("Ivan", "Ivanov",
["HTML", "CSS", "JavaScript"]
);
var developer2 = developerFactory("Maria", "Mineva",
["Python", "Machine Learning", "Data Science"],
);
// и сме сигурни, че всеки обект има пропърти 'firstName':
// Конструктор за обекти от тип Developer. Важно е да бъде извикан с "new"! Поради това конвенцията е името да започва с главна буква.
function Developer(firstName, surName, skills){
this.firstName = firstName;
this.surName = surName;
this.skills = skills;
this.applyForJob = function(){
var skillsStr = this.skills.toString();
console.log(`Hi, I'm ${this.firstName} ${this.surName}. My strongest skills are ${skillsStr}.`);
}
}
//сега лесно създаваме обектите от тип Developer:
var developer1 = new Developer("Ivan", "Ivanov",
["HTML", "CSS", "JavaScript"]
);
var developer2 = new Developer("Maria", "Mineva",
["Python", "Machine Learning", "Data Science"],
);
let x = 5;
let y = x; // в y се копира стойността 5
x = 10; // Променяме стойността на x
console.log(x); // 10
console.log(y); // 5 (y запазва оригиналната стойност)
let obj1 = { x: 1 };
let obj2 = obj1; // в obj2 се копира референцията към obj1, не стойностите
obj1.x = 2; // Променяме стойността на x в obj1
console.log(obj1.x); // 2
console.log(obj2.x); // 2 (и obj2 се променя, защото е референция към същия обект)
See the Pen Object Definition Example by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Square braces notation example by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Three ways of creating (students) objects by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Object Constructor Example & HW_1 by Iva Popova (@webdesigncourse) on CodePen.
See the Pen findYoungestPerson - example by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Array of objects example & HW by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Calculate Rectangle Area - Task by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Functions as properties values - Example by Iva Popova (@webdesigncourse) on CodePen.
See the Pen Calculator object Task by Iva Popova (@webdesigncourse) on CodePen.
These slides are based on
customised version of
framework