Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
13 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 282

Странный прототип

19.07.2016, 13:01. Показов 573. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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 );
Почему в этой строке Rabbit.prototype = {}; прототип не меняется? Почему он поменяется если создать объект после этой строки? А если написать так:
JavaScript
1
2
3
4
5
6
7
8
9
10
function Rabbit(name) {}
Rabbit.prototype = {
  eats: true
};
 
var rabbit = new Rabbit();
 
Rabbit.prototype.eats = false;
 
alert( rabbit.eats );
то поменяется
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2016, 13:01
Ответы с готовыми решениями:

прототип
Вот пример метода Element.prototype.classListe = function(){ var self = this; this.result = new ClassList(self); return...

Прототип
Здравствуйте, Можно ли как-то оптимизировать данный код? //---------------------------------------------------------------------- ...

Ссылки на прототип
function Rabbit(name) { this.name = name; } Rabbit.prototype.sayHi = function() { alert( this.name ); } var rabbit = new...

4
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.07.2016, 13:11
Noob32, потому что свойство prototype не может быть удалено
оно просто дополняется свойствами объектов, которые ему дают
это сделано для удобства
например

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// вот я хочу сделать ваш объект
function Rabbit() {}
Rabbit.prototype = {
  eats: true
};
 
// через какое-то время мне захотелось, чтобы он ещё и прыгал, и убегать мог от врагов. что мне теперь, под каждое свойстов писать вот так:
Rabbit.prototype.runAway = true
Rabbit.prototype.run = true
Rabbit.prototype.jump = true
 
// скажу честно, мне в лом, по этому я напишу так
Rabbit.prototype = {
    run: true,
    runAway: true,
    jump: true
}
как показала практика, свойства прототипов не удаляются, они только дополняются и изменяются
1
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
19.07.2016, 13:31
На самом деле когда вы пытаетесь получить свойство из прототипа, оно берется не напрямую из prototype, а из скрытого свойства объекта __proto__, которое хранит ссылку на оригинальный прототип:

JavaScript
1
2
3
4
5
6
7
8
function Rabbit() {}
Rabbit.prototype = {
  eats: true
};
 
var rabbit = new Rabbit();
 
rabbit.__proto__ === Rabbit.prototype; // true
Соответственно, присвоив пустой объект прототипу конструктора, вы не меняете свойство __proto__:

JavaScript
1
2
3
Rabbit.prototype = {};
 
rabbit.__proto__ === Rabbit.prototype; // false
Если же просто поменять значение свойства у прототипа, то оно изменится и у созданного объекта, т.к. Rabbit.prototype и rabbit.__proto__ продолжат ссылаться на один и тот же прототипирующий объект.
1
13 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 282
19.07.2016, 13:48  [ТС]
СЛОЖНА
0
19.07.2016, 13:55

Не по теме:

ostgals, это уже сложности реализации))

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2016, 13:55
Помогаю со студенческими работами здесь

Зачем нужен прототип (prototype)?
Всем привет. Прохожу курсы Codecademy и застрял на этом уроке: https://www.codecademy.com/courses/objects-ii/2/4 . Никак не могу понять...

Прототип - не получается вызвать функцию
Здравствуйте написал функцию так, но когда вызываю так, Layer._close();, пишет, что функции нет.function Layer() { } ...

JavaScript, добавить-функцию к классу строк, используя прототип
Помогите, пожалуйста... Написать скрипт, в котором добавить к стандартному классу строк функцию, реализующую удаление лишних...

Добавить ф-цию в прототип, которая модифицирует объект, для которого она была вызвана
Здравствуйте! Название темы длинное получилось, надеюсь на примере будет понятно. Написал ф-цию, которая возвращает массив с уникальными...

Создать объект прототип робота, который изготовлен из определенного материала, имеет имя, пол, оружие, умеет стрелять, здороваться и прощаться
Задачу я более-менее поняла, но как сделать, чтобы робот умел стрелять? ... Покажите пожалуйста в коде .. ))


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru