Является ли наследование прототипов по-разному основанным на типе? Является ли контекстная ссылка ЭТО, работающая по-разному в этих двух случаях? Почему в этих примерах один обращается к прототипу, а другой создает новое свойство для объекта?Js Прототип простых типов и объектов
var Player = function(){};
Player.prototype.name = '';
Player.prototype.set_name = function(name){this.name = name;}
var p1 = new Player();
var p2 = new Player();
p1.set_name('Johanna');
Значение возвращение этих два:
// Checking object properties
>p1
Player {name: "Johanna", set_name: function}
>p2
Player {name: "", set_name: function}
// Checking prototypes
>p1.__proto__
Object {name: "", set_name: function}
>p2.__proto__
Object {name: "", set_name: function}
Но если я Игрок с именем свойства объекта, функция set_name модифицирует прототип.
var Player = function(){};
Player.prototype.name = {};
Player.prototype.set_name = function(name){this.name['first_name'] = name;}
var p1 = new Player();
var p2 = new Player();
p1.set_name('Andrew');
Значение возвращение этих двух:
// Checking object properties
>p1.name
Object {first_name: "Andrew"}
>p2.name
Object {first_name: "Andrew"}
// Checking prototypes
>p1.__proto__.name
Object {first_name: "Andrew"}
>p2.__proto__.name
Object {first_name: "Andrew"}
Почему это происходит? Какую концепцию мне не хватает?
Когда вы добавляете свойство в прототип, оно делится с другими экземплярами. Добавьте уникальные свойства конструктору. – elclanrs
Не является Player.prototype.name = ''; и Player.prototype.name = {}; оба используют прототип? Почему использование функции set_name действует над прототипом в одном случае и добавляет свойство к объекту в другом случае? – kitimenpolku