Znajdź swoje korzenie
Agata Malec - Sromek
Jak myśleć po prototypowemu?
agatajs
Czym się zajmuję?
Mentoruję, programuję a także
opiekuję się kursem Front-end-owym w
Planeta:
Model dziedziczenia:
Ziemia
Klasyczny
Nośnik informacji:
DNA
Osobniki kopiują niektóre cechy między sobą
Klasa pochodna dziedziczy od klasy bazowej.
Obiekty są kopiami klas.
Planeta:
Model dziedziczenia:
Prototypia
Prototypowy
Nośnik informacji:
łańcuch
Osobniki korzystają z cech innych osobników
Nie ma klas, są obiekty.
Obiekty dziedziczą od innych obiektów.
var alien = {
name: "jlSuDrup",
age: 14521,
sayHello: function () {
console.log("nuqneH");
}
};
var alien = {
name: "jlSuDrup",
age: 14521,
sayHello: function () {
console.log("nuqneH");
}
};
var alien = {
name: "jlSuDrup",
age: 14521,
sayHello: function () {
console.log("nuqneH");
}
};
Odwołanie do innego obiektu
[[Prototype]]
__proto__
własność obiektu wskazująca na inny obiekt
.. tak zapisujemy tą własność w specyfikacji
function Alien(name) {
this.name = name;
}
console.dir(Alien);
Ojciec wszystkich ojców
var A = {};
var B = Object.create(A);
var greenAlien = {
sayHello: function() {
return `Hello, my name is ${ this.name }`
}
}
var redAlien = Object.create(greenAlien);
redAlien.fly = function() {
console.log('I can fly');
}
var alienA = Object.create(greenAlien);
alienA.name = "Optimus";
var alienB = Object.create(redAlien);
alienB.name = "Clark";
Przy większej ilości obiektów pomoże nam Fabryka
const alien = {
sayHello () {
return `Hello, my name is ${ this.name }`;
}
};
const createAlien = (name) => {
return Object.assign(Object.create(alien), {
name
});
}
const clark = createAlien('Clark');
clark.sayHello();
Factory function
function Alien(name) {
this.name = name;
}
Alien.prototype.sayHello = function() {
return `Hello, my name is ${ this.name }`;
}
let clark = new Alien('Clark');
console.log(clark.sayHello());
Prototypowe dziedziczenie
konstruktory
Prototypowe dziedziczenie
prototypy
let clark = new Alien('Clark');
"new" is a remnant of the days where JavaScript accepted a Java like syntax for gaining "popularity"
const alien = {
sayHello () {
return `Hello, my name is ${ this.name }`;
}
};
const clark = Object.assign(
{},
alien,
{name: 'Clark'}
);
clark.sayHello()
const alien = {
sayHello () {
return "Hello";
}
};
function createAlien() {
return {
name: 'Clark'
};
}
var alienA = createAlien();
const alienPrototype = {
sayHello: function sayHello() {
return "Hello"
}
};
function createAlien() {
return Object.create(alienPrototype);
}
const alienA = createAlien();
function Alien() { }
Alien.prototype.sayHello = function sayHello() {
return "Hello"
}
const alienB = new Alien();
function createBulb() {
let isOn = false // private
return {
turnOn: function turnOn() {
isOn = true
return this;
},
turnOff: function turnOff() {
isOn = false;
return this;
},
isOn: function isOnMethod() {
return isOn;
}
};
}
var bulb = createBulb();
https://github.com/gnodi/danf
http://docs.sencha.com/extjs/4.0.7/#!/api/Ext
https://www.youtube.com/watch?v=ya4UHuXNygM&t=50m23s