OLOO

Objects Linded to Other Objects

by Artem

HTML

<!-- 1. protected/private свойства на прототипе? -->
<!-- 2. Behavior Delegation. Как проверить конечный объект?  --> Checked!
<!-- 3. Свойство constructor. Проверка instanceof -->

JavaScript

'use strict';

const Foo = {
  init(name) {
      this.name = name;
    },
    sayHi() {
      console.log(`Hello, my name is ${this.name}`);
    }
};
Foo.init.prototype = Foo; //- 3

const Bar = Object.create(Foo, {
  _admin: {
    writable: true,
    configurable: false,
    value: false
  },
  admin: {
    get() {
        return Object.getPrototypeOf(this)._admin; //- 1
      },
      set(value) {
        Object.getPrototypeOf(this)._admin = value;
      }
  }
});

Bar.isAdmin = function() {
  console.log(this._admin);
}

const vasya = Object.create(Bar);
vasya.init('vasya');
vasya.sayHi();
vasya.admin = true;
//vasya.isAdmin();
console.dir(vasya);
console.log(vasya instanceof Foo.init); //- 2 А как же Bar? 
console.log(Bar.isPrototypeOf(vasya)); //- 2
console.log(Foo.isPrototypeOf(vasya)); //- 2