JSFiddle - React, Tailwind, and code Playground

by Researcher

JavaScript

// sk: [email protected]
// пример подготовлен по материалам http://dmitrysoshnikov.com/ecmascript/ru-javascript-the-core/
// Объект, отвечающий за организацию консольного вывода информации
//===== Трасировщик ===========================
console_ = {
    log: {},
    trace: function(){
// используем jQuery для трассировки сообщений
        $.each(console_.log, function(i, e){
       //alert("i == " + i); 
           document.write(i + " == " + e + "<br/>");
        })
    }
    
};
//==============================================

// функция-конструктор
var b = new Foo(20);
var c = new Foo(30);

function Foo(y) {
  // которая умеет создавать объекты
  // по заданному шаблону: все эти объекты
  // будут иметь родное свойство "y"
  this.y = y;
  // унаследованное свойство "x"
  //Foo.prototype;
   alert(this === c);
  Foo.prototype.x = 10;
  Foo.prototype.calculate = function (z) {
      return this.x + this.y + z;
  }
  return this;
}
  
// создаём наши объекты "b" и "c"
// используя "шаблон" Foo

 

 
// покажем, что мы работаем именно
// с теми свойствами, которые ожидаем

console_.log ={
    // вызываем унаследованный метод
    t1: b.calculate(30), // 60
    t2: c.calculate(40), // 80
    t10: (b.__proto__ === Foo.prototype), // true
    t20: (c.__proto__ === Foo.prototype), // true
 
  // также "Foo.prototype" автоматически создает
  // специальное свойство "constructor", являющееся
  // ссылкой на саму функцию-конструктор, т.е. на "Foo";
  // объекты "b" и "c" могут найти это свойство посредством
  // делегации и использовать его для проверки своего конструктора
 
    t30: (b.constructor === Foo), // true
   t40: (c.constructor === Foo), // true
    t50: (Foo.prototype.constructor === Foo), // true
 
    t60: (b.calculate === b.__proto__.calculate), // true
    t70: (b.__proto__.calculate === Foo.prototype.calculate) // true
 
};
console_.trace();