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();