#javascript #function #object #ecmascript-6
#javascript #функция #объект #ecmascript-6
Вопрос:
Я узнал на MDN, что объект — это нечто со свойствами и методом, и что в основном все в JavaScript является / может рассматриваться как объект. Все, что упоминалось в предыдущем предложении, затрудняет определение того, что такое объект. В некоторых статьях говорится, что объекты — это просто контейнеры данных, в других говорится, что объекты — это аккуратные пакеты информации о чем-то, что вы хотите использовать в своем коде. Являются ли единственными объектами: массивы, объектные литералы и функции?
let objectLiteral = {
} ;
let exFunction = () = > {
}
let arr = [
] ;
Комментарии:
1. Да, почти все значения в JavaScript являются объектами. Да, объекты могут быть контейнерами данных. Да, объекты могут быть аккуратными пакетами информации. Массивы — это особый вид объекта, который может быть инициализирован с помощью
[...]
синтаксиса. Функции — это особый вид объекта, который может вызываться сfn()
синтаксисом и объявляется также со своим собственным специальным синтаксисом. Существуют особые случаи, такиеundefined
как, которые не являются объектами, массивами или функциями
Ответ №1:
Объект — это сложный тип данных, который хранит значения и позволяет получить к ним доступ с помощью определенного ключа. Комбинация ключ / значение внутри объекта называется свойством.
JavaScript — это объектно-ориентированный язык программирования. Это означает, что почти каждое значение является объектом. Некоторые виды значений называются примитивами, и они рассматриваются как «основа», как простые типы данных. Этими примитивами являются строки, числа, логические значения, null
и undefined
.
(Обратите внимание, что, кроме логических значений, null
и undefined
, все примитивы также являются скрытыми объектами, потому что только объекты могут иметь методы — у вас есть String.split
, Number.toString
и т.д.)
Существует также множество других типов данных, которые представляют собой определенный вид объекта:
- Массивы хранят значения индексированным способом и гарантируют порядок (в отличие от объектов)
- Функции получают значения, выполняют код и могут возвращать значение для последующего использования
- Наборы похожи на массив, но хранят только уникальные значения
Однако литерал объекта — это то, о чем многие люди думают, когда думают «объект». Это выглядит так:
const myObject = {
name: "Jack",
cool: false,
friends: 0
pets: ["Dog", "Cat", "Snake"]
};
Вы можете видеть, что свойства объекта представлены в формате key: value
, с запятой ,
после этого, если есть другие свойства (в ES6 конечные запятые разрешены).
Объекты также могут содержать методы:
const myObject = {
name: "Jack",
sayHello: function() {
console.log(`Hello, my name is ${this.name}!`);
}
};
Примечание: При создании методов внутри объекта функция самого высокого уровня (в данном случае, часть непосредственно после sayHello
) должна быть функцией в стиле ES5, чтобы ссылки на this
функционировали правильно. Если вложенные функции (например setTimeout
) также должны ссылаться на объект, они должны быть функциями в стиле ES6, потому что функции со стрелками ( =>
) не имеют собственной this
привязки.
Объекты также могут быть созданы с использованием конструкторов (ES5) или классов (ES6).
Конструктор должен быть функцией ES5, и в нем вы назначаете все свойства (обычно из переданных параметров):
function MyObject(name, cool) {
this.name = name;
this.cool = cool;
}
var jack = new MyObject("Jack", false);
var bob = new MyObject("Bob", true);
console.log(jack);
console.log(bob);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Чтобы присоединить методы к новым объектам, вы можете присоединить их к prototype
конструктора:
function MyObject(name, cool) {
this.name = name;
this.cool = cool;
}
MyObject.prototype.sayHello = function() {
console.log(`Hello, I am ${this.name}`);
};
var jack = new MyObject("Jack", false);
var bob = new MyObject("Bob", true);
jack.sayHello();
bob.sayHello();
Классы ES6 представляют собой рестайлинг конструктора. У вас есть constructor
функция, в которой вы определяете все свои свойства и размещаете все остальные методы в том же месте. Вот наш MyObject
конструктор, преобразованный в класс ES6:
class MyObject {
constructor(name, cool) {
this.name = name;
this.cool = cool;
}
sayHello() {
console.log(`Hello, I am ${this.name}`);
}
}
let jack = new MyObject("Jack", false);
let bob = new MyObject("Bob", true);
jack.sayHello();
bob.sayHello();
Вы также можете размещать объекты в других контейнерах данных, таких как объекты и массивы. Если вы поместите объект внутри объекта, у вас получится вложенный объект:
const parent = {
nested: {
value: "I am nested"
}
};
console.log(parent.nested.value);
Как вы можете видеть выше, вы получаете доступ к различным свойствам и методам объектов, используя точечную нотацию. Но что, если у вас есть свойство, которое вы хотите получить, но имя свойства хранится в переменной? Вам нужно использовать динамическое обозначение свойств, которое также называется обозначением квадратных скобок (потому что оно включает квадратные скобки []
):
const obj = {
aReallyObscureKey: "Hello!"
};
const key = "aReallyObscureKey";
console.log(obj[key]);
Массивы также могут содержать объекты:
const arrayOfObjects = [{
name: "Jack",
cool: false
}, {
name: "Bob",
cool: true
}];
console.log(arrayOfObjects);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Надеюсь, это поможет. Вот несколько ссылок, которые помогут узнать больше об объектах:
Комментарии:
1. Вау! Спасибо за такое замечательное объяснение!
Ответ №2:
Объекты полезны, когда вы хотите иметь что-то из многих типов. Например, если вы хотели бы получить некоторую информацию о человеке или контакте; без объектов вам нужно было бы сохранить информацию как:
const name = 'John';
const age = 32;
const lastName = 'John Doe'
const zips = [1, 2, 3, 4]
однако объекты позволяют вам иметь все эти свойства в одном типе
например:
const person = {
name: 'John',
age: 32,
lastName: 'Doe'
zips : [1, 2, 3, 4]
};
console.log(person.name)
Объекты могут хранить что угодно, любого типа. Я надеюсь, что это поможет.
Ответ №3:
Объект JavaScript — это пара имя: значение. Когда ваш веб-браузер обменивается данными с веб-сервером, более чем вероятно, что они обмениваются данными через HTTP с использованием JSON (обозначение объекта JavaScript)
Допустим, вы просматриваете свой профиль Facebook, при нажатии на детали профиля вы запрашиваете страницу, и сервер facebook предоставит вам объект, который может выглядеть следующим образом:
{
name: "iamlearningtocode"
occupation: "student programmer"
hobbies: "programming"
}
Затем с помощью JavaScript запускается код, который принимает эту информацию и отображает ее на странице в аккуратном порядке. Надеюсь, это имеет смысл!