Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   объект не изменяется через прототип (https://javascript.ru/forum/misc/60691-obekt-ne-izmenyaetsya-cherez-prototip.html)

js-jedi-knight 14.01.2016 18:56

объект не изменяется через прототип
 
вопрос наверное нубский, но ответа не нашёл
разбирал уроки по js и столкнулся вот с чем:

function User(name, age){
    this.name = name;
    this.age = age;
}

var u2 = new User('Mike', 32);

обычный учебный пример, но при попытке изменить через прототип

User.prototype.x = true;

ничего не происходит, не могу понять что не так, вроде написано без ошибок

Lemme 14.01.2016 18:59

function User(name, age){
    this.name = name;
    this.age = age;
}

var u2 = new User('Mike', 32);
alert(u2.x);
User.prototype.x = true;
alert(u2.x);


p.s чего вы ждете?

рони 14.01.2016 19:00

Цитата:

Сообщение от js-jedi-knight
ничего не происходит

а что должно было произойти?

js-jedi-knight 14.01.2016 19:10

Цитата:

Сообщение от рони (Сообщение 403789)
а что должно было произойти?

при вводе через консоль "u2;", свойство "x" не отображается

Keramet 14.01.2016 19:14

Цитата:

Сообщение от js-jedi-knight (Сообщение 403793)
при вводе через консоль "u2;", свойство "x" не отображается

а его нет нет у u2, оно в прототипе.
при обращении u2.х значение по цепочке прототипов берётся из прототипа (т.к. не определено у самого объекта)

Keramet 14.01.2016 19:17

я бы посоветовал посмотреть вот это видео - мне понравилось: Конструкторы и прототипы

Lemme 14.01.2016 19:17

Советую почитать.

http://learn.javascript.ru/prototypes

js-jedi-knight 14.01.2016 19:22

Цитата:

Сообщение от Keramet (Сообщение 403794)
а его нет нет у u2, оно в прототипе.
при обращении u2.х значение по цепочке прототипов берётся из прототипа (т.к. не определено у самого объекта)

допустим, тогда почему в учебном примере после той же последовательности действий, через ту же консоль получается следующее:

User {name: "Mike", age: 32, x: true }

Keramet 14.01.2016 19:24

Цитата:

Сообщение от js-jedi-knight (Сообщение 403797)
... после той же последовательности действий...

покажите эту вашу "последовательность". что вы делали (или пример учебный скиньте)

Keramet 14.01.2016 19:29

function User(name, age){
				this.name = name;
				this.age = age;
			}
			var u2 = new User('Mike', 32);
			User.prototype.x = true;
			console.log(u2);

в консоли:
User {name: "Mike", age: 32}

есть ещё свойстов __proto__: User - это ссылка на прототип (у прототипа есть свойство х: true). что вас удивляет?

js-jedi-knight 14.01.2016 19:40

Вложений: 1
Цитата:

Сообщение от Keramet (Сообщение 403794)
а его нет нет у u2, оно в прототипе.
при обращении u2.х значение по цепочке прототипов берётся из прототипа (т.к. не определено у самого объекта)

Цитата:

Сообщение от Keramet (Сообщение 403798)
покажите эту вашу "последовательность". что вы делали (или пример учебный скиньте)

во вложении должен быть скрин, если у меня прямые руки

на счёт _proto_, только что попробовал, там свойство "x" тоже не указано.

Keramet 14.01.2016 19:46

этот обрывок и есть ВСЯ последовательность? скиньте код - тогда будет о чём говорить, а пока - "учите мат.часть" (видео я дал)

js-jedi-knight 14.01.2016 20:05

Вложений: 4
Цитата:

Сообщение от Keramet (Сообщение 403803)
этот обрывок и есть ВСЯ последовательность? скиньте код - тогда будет о чём говорить, а пока - "учите мат.часть" (видео я дал)

вроде вся последовательность

в документе ****.js
function User(name, age){
this.name = name;
this.age = age;
this.admin = false;
}


в консоли браузера
> var u1 = new User("John", 25)
< undefined

> u1
< User {name: "John", age: 25, admin: false}

> User.prototype.x = 10;
<10

> u1
< User {name: "John", age: 25, admin: false, x: 10}

Keramet 14.01.2016 20:33

прежде всего - вот информация по оформлению кода: http://javascript.ru/formatting
ломать глаза и расшифровывать миниатюры - не шарман :nono:

js-jedi-knight 14.01.2016 20:45

Цитата:

Сообщение от Keramet (Сообщение 403805)
прежде всего - вот информация по оформлению кода: http://javascript.ru/formatting
ломать глаза и расшифровывать миниатюры - не шарман :nono:

намёк понял, был неправ)
сейчас исправлю

Keramet 14.01.2016 21:08

Уже лучше :) А теперь - слушаю ваш вопрос, что вам не понятно?

Keramet 14.01.2016 21:10

Настоятельно рекомендую просмотреть это видео: Конструкторы и прототипы. Всё доступно и доходчиво объяснено, после просмотра 99% вопросов отпадут

Яростный Меч 14.01.2016 21:14

Вложений: 1
js-jedi-knight, ты, похоже, прикалываешься.
у меня в консоли было так:

Keramet 14.01.2016 21:16

Для проверки принадлежности свойства объекту есть специальная функция hasOwnProperty():
function User(name, age){
				this.name = name;
				this.age = age;
				this.admin = false;
			}
			var u2 = new User('Mike', 32);
			User.prototype.x = true;

			alert("Есть ли свойство 'x' у объекта 'u2'?  " + u2.hasOwnProperty('x'));
			alert("Есть ли свойство 'name' у объекта 'u2'?  " + u2.hasOwnProperty('name'));

P.S. нажмите зелёненький треугольничек с надписью Запустить!

js-jedi-knight 14.01.2016 21:39

Цитата:

Сообщение от Keramet (Сообщение 403809)
Уже лучше :) А теперь - слушаю ваш вопрос, что вам не понятно?

непонятно почему у меня не выводится в консоли "x" как свойство User'а как в учебном примере. это раз.
два - Lemme предложил вариант вывести это свойство через alert, что сработало (спасибо) и браузер показал мне "10", но hasOwnProperty выводит мне false, этого я тоже не понимаю

Keramet 14.01.2016 22:14

мне тоже кое-что не понятно: вы видели ссылку на видео, которую я дал?

Keramet 14.01.2016 22:20

js-jedi-knight,
для того, чтобы что-то понять, надо приложить усилия. Самым простым способом можно считать просмотр обучающего видео, где специалисты подробно "разжевывают" тему. надо найти 1.5 часа, просмотреть видео и потом возвращаться с вопросами (если, конечно, они останутся).

js-jedi-knight 14.01.2016 22:32

Цитата:

Сообщение от Keramet (Сообщение 403820)
js-jedi-knight,
для того, чтобы что-то понять, надо приложить усилия. Самым простым способом можно считать просмотр обучающего видео, где специалисты подробно "разжевывают" тему. надо найти 1.5 часа, просмотреть видео и потом возвращаться с вопросами (если, конечно, они останутся).

уже смотрю, спасибо Вам и Lemme за материал, обязательно всё изучу, просто просмотрел уже несколько топиков по прототипам, пытался найти ответы на англоязычных источниках, но безрезультатно. надеюсь ваши ссылки мне помогут и дело правда в моих пробелах в теории (и практике)

Keramet 14.01.2016 23:03

к материалу Lemme я бы приступил после видео


Часовой пояс GMT +3, время: 16:54.