@lexaxaxa

Можно ли добавить свойства литерального объекта А литеральному объекту В через прототип объекта В?

Можно ли добавить свойства литерального объекта А литеральному объекту В через прототип объекта В?
var a={k:7};
var b={h:5};
b.prototype=a;
b.k -undefined почему?
Как добавить свойство a.k объекту b через прототип b?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 4
@dixoNich
frontend developer
var a={k:7};
var b = Object.create(a)
b.k
Ответ написан
Комментировать
Изменение свойства prototype после создания объекта ничего не изменит в самом объекте.
Для справки прочитайте первый ответ в этом посте: stackoverflow.com/questions/7015693/how-to-set-the...

Что касается решения задачи:
Вариант 1:
prototype
var a = {k:7};
function B(h) {
    this.h = h;
}
B.prototype = a;
var b = new B(5);
console.log(b.k); // 5

Вариант 2:
Object.create
var a = {k:5};
var b = Object.create(a, {h: { writable: true, configurable: true, value: 7 },});
console.log(b.k); // 5

Вариант 3:
ES2015
class A {
 constructor () {
   this.k  = 5;
 }
}
class B extends A {
 constructor(h) {
   super();
    this.h = h;
}
}
var b = new B(7);
console.log(b.k); // 5
Ответ написан
Комментировать
@Riim
b.setPrototypeOf(a);

или

b.__proto__ = a;

но поддержка браузерами у __proto__ хуже.
Ответ написан
Комментировать
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
b.k -undefined почему?


Потому что свойство prototype не ссылается на прототип текущего объекта, это делает __proto__.

var a = {k:7};
var b = {h:5};


b.__proto__ = a;

Но поддерживается оно не везде, так что нужно использовать конструкторы или хотя бы Object.create!

var b = Object.create({k:7}, {h:5});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы