Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4

Хорошо знающим prototype

21.11.2017, 19:28. Показов 1691. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, что скажете по поводу моих рассуждений. Очень хочу правильно разобраться.
Принято говорить "объект берёт метод из прототипа".

У функций-конструкторов есть внутреннее свойство prototype. Часто почему-то пишут, что метод берётся из Конструктор.prototype.

Так вот, это свойство prototype - это объект с полезными методами или всё-таки ссылка на какой-то "таинственный" объект с этими методами?

Какой-нибудь массив берёт метод slice() от метода Array.prototype.slice().
Но есть ли он реально в конструкторе Array в его свойстве prototype этот метод? Или он хранится в другом "невидимом" нам объекте через ссылку?

Согласно учебнику, задача prototype - лишь задать свойство __proto__ у новых объектов. Всё! Только это.

Вот пример из учебника:
JavaScript
1
2
3
4
5
6
7
8
9
10
function Rabbit() {}
Rabbit.prototype = {
  eats: true
};
 
var rabbit = new Rabbit();
 
Rabbit.prototype = {};
 
alert( rabbit.eats );
Выше был prototype перезаписан пустым объектом. Но alert всё равно выводит true! Значит prototype - это не объект-хранилище свойств/методов, а лишь ссылка на какой-то другой объект, который почему-то сохранился при перезаписи свойства prototype.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2017, 19:28
Ответы с готовыми решениями:

Какой из методов рациональнее использовать: Array.prototype.indexOf() или String.prototype.indexOf()
функции передаётся буква алфавита в нижнем регистре и она должна вернуть следующую по очереди букву алфавита в нижнем регистре при этом...

Object.prototype.b
По умолчанию в прототипе функции Object (кстати, так можно эти функции называть классами или конструкторами?) не содержится никаких свойств...

C.prototype.constructor = C
Привет. Код function A() { this.Name = 'Class A' } A.prototype.PrintName = function () { alert(this.Name); }

5
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
22.11.2017, 09:55
Цитата Сообщение от DimaDima1985 Посмотреть сообщение
prototype - это не объект-хранилище свойств/методов
это объект/хранилище свойств/методов ровно до того момента, пока вы не перезапишите свойство prototype новым объектом.

После того как вы его перезаписали эти свойства у уже созданных объектов сохранятся в __proto__, но новых свойств не будет и обратите внимание на constructor:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Rabbit () {}
Rabbit.prototype.eats = true;
 
var rabbit = new Rabbit();
 
console.log(rabbit.constructor === Rabbit); //=> true
console.log(rabbit.constructor); //=> f Rabbit() {}
 
Rabbit.prototype = {
    number: 42
};
 
var newRabbit = new Rabbit();
console.log(newRabbit.constructor === Rabbit); //=> false
console.log(newRabbit.constructor); //=> f Object() { [native code] }
console.log(newRabbit.eats); //=> undefined
console.log(newRabbit.number); //=> 42
 
console.log(rabbit.eats); //=> true
console.log(typeof rabbit.__proto__.eats); //=> boolean
console.log(rabbit.number); //=> undefined
0
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
22.11.2017, 15:35  [ТС]
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Всё, кажется, я понял как всё устроено! Вся "фича" связана тем, что объект в ЯП JavaScript существует в одном единственном экземпляре. Фактически, у него нет имени, только лишь какое-то своё внутреннее название в интерпретаторе. Объекты все уникальны, а все "глобальные" переменные или свойства объектов, которые "содержат" какой-то объект, на самом деле не содержат этот объект, а лишь ссылку на него.

JavaScript
1
2
3
4
5
6
7
8
var abc = {x: 6}; // abc содержит не объект, а ссылку на уникальный объект {x: 6}
var def = abc; // def содержит ссылку на уникальный объект
var zzz = abc; // zzz содержит ссылку на уникальный объект
abc = undefined; /// переменную abc поменяли, но объект сохранился
alert(def.x); // выводит 6 из уникального объекта
def = undefined;
alert(zzz.x); // выводит 6 из уникального объекта, хотя уже две переменных были перезаписаны
zzz = undefined; // вот теперь объект точно уничтожен из "недр" джаваскрипта, больше не осталось переменных, которые содержат на него ссылку
То же самое с prototype. Свойство - это переменная. Она не содержит объект. Она содержит ссылку на объект. Перезаписали свойство prototype - объект всё равно сохранился, потому что есть объекты, у которых есть свойство __proto__ со ссылкой на этот объект.

____________

Ни одна переменная или свойства не содержит объект. Только ссылку на него. Обращаемся к переменной/свойству - она/оно возвращает объект.
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
05.12.2020, 07:13
DimaDima1985, рекомендую параллельно изучать C#. На удивление JavaScript станет намного более понятным.
0
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
05.12.2020, 10:52  [ТС]
amr-now, ох, топик же трёхлетней давности
0
22 / 15 / 8
Регистрация: 20.02.2019
Сообщений: 128
06.12.2020, 22:07
Миниатюры
Хорошо знающим prototype  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2020, 22:07
Помогаю со студенческими работами здесь

использование prototype
Доброй ночи! Помогите, пожалуйста, разобраться. Есть пример кода: function array_max(){ var i, max = this; for (i =...

Javascript prototype
Вообщем, смотрим код ниже. function EsObject(_data){ var data = $.extend(true, {}, _data), SelfObj = this; this.set =...

Object.prototype.method
Всем привет! объясните пожалуйста, есть функция конструктор "myObject": function myObject () { }; myObject.prototype.on =...

prototype.slice.call()
Наткнулся на такую конструкцию: "чтобы вызвать другую функцию с теми же аргументами, но кроме первого, можно создать из arguments...

Prototype, scriptaculous сейчас актуальны?
скажите пожалуйста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru