середа, 12 березня 2014 р.

Итак, что мы выучили:

JS. Объекты как ассоциативные массивы. 
Функции. Задание в виде конструктора и литерала.


function sayHello() {
   alert("Hi there! I'm a function!");
}


var sayHello = function () {
   alert("Hi there! I'm a function!");
}
__________________________________________________
неправильное навешивание функции обработчика:
for (var i = 0; i < 10; i++) {


   var div = document.createElement('div')
   div.innerHTML = i
   div.onclick = function () {
       alert(i);
   }
   document.getElementById(parentId).appendChild(div)

}


правильное:
for (var i = 0; i < 10; i++) {


   var div = document.createElement('div')
   div.innerHTML = i
   div.onclick = function (x) {
       return function () {
           alert(x);
       }
   }(i)


   document.getElementById(parentId).appendChild(div)

}



Шаблоны вызова функций.
// Шаблон вызова метода:


var question = {
   title: "Question title",
   updateTitle: function (val) {
        this.title = val; // this - question


   }
}


// Шаблон вызова функции:


var question = {
   title: "Question title",
   updateTitle: function (updatedTitle) {
       function handler(value) {
             this.title = value; // this - window
       }
       handler(updatedTitle);
   }
}
question.updateTitle("updated title");
alert(question.title)
alert(window.title)



// Шаблон вызова метода apply:


var person = {};


function initialize(firstname, lastname) {
this.firstname = firstname;
   this.lastname = lastname;
}

initialize.apply(person, ["Some", "Person"]); // this - person
alert(person.lastname);


// Шаблон вызова конструктора:
function Person(firstname, lastname) {
   this.firstname = firstname;
   this.lastname = lastname;
}


var person = new Person("Some", "Person");
alert(person.firstname);
alert(person.lastname);

Механизмы наследования:


function Person(firstname, lastname) {
   this.firstname = firstname;
   this.lastname = lastname;
}
function Employee(position) {
   this.position = position;
}


var person = new Person("Andrey", "Drebot");


Employee.prototype = person;


var employee = new Employee("Software Developer");


function person(firstname, lastname) {
   return {
       firstname: firstname,
       lastname: lastname
   };
}
function employee(firstname, lastname, position) {
   var p = person(firstname, lastname);
   p.position = position;
   return p;
}

var employee = new employee("Andrey", "Drebot", "Software Developer");



ООП в Javascript. Основные практики и подходы к реализации ООП с помощью Javascript на кошках.
(ООП нужно чтоб решить проблему и избежать изучения предметной области - чтоб накормить кота, не вникая, как у него устроена пищевая трубка)
Наследование. У кота есть все признаки животного.

function Animal(name) {
   var self = {
       name: name
   };

   this.greet = function () {
       alert("I'm " + self.name);
   }
}
function Cat(name) {
   Animal.call(this, name);
}

var cat = new Cat('The Cat');
cat.greet();

Полиморфизм. В дочерних классах можно переопределять свойства базового класса.

function Animal(name) {   
  this.greet = function () {
      alert("I'm " + this.name);
  }
}


function Cat(name) {
  Animal.call(this);
  this.name = name;
}


var cat = new Cat('The Cat');
cat.greet();


Инкапсуляция . Не только скрывает данные, но также показывает как объект должен работать.
function Cat(name) {
   var self = {
       name: name
   };
   this.sayMeow = function () {
       alert("Meow! I'm " + self.name);
   }
}

2) Модуль - кусок кода, который решает задачу и скрывает внутренюю реализацию. 
Module pattern - в каждой ф-ции в конце будет явный return ==> удобно для полимрфозма и наследования
Revealing module pattern - все сначала объявляется как приватные переменные, а в конце перечисляется публичный интерфейс  ==> чаще используется

3) Принцип Солид - набор советов-практик-рекомендаций "как надо"

S - Single responsibility principle - у класса не больше одной ответственности

O - Open/closed principle - классы должны быть закрыты для изменений
L - Liskov substitution principle - теплое и мягкое, как белое и пушистое - не родственники
I - Interface segregation principle - интерфейс у качественно разных объектов должен быть разделен и не наследоваться от единого объекта.
D - Dependency inversion principle - хз


4) Knockout - фреймворк основанный на MVVM паттернe.

....

Что я использовала, при выполнении #задания1 заяц-волк? О_о мало что.. не зря назвала свое приложение madforest. умалишенный wood. предсказуемость и надежность под открытым вопросом. in progress. нихрена нормально не работает.
зато типа я знаю как надо и как должно. прямо я умничка ахах.



Немає коментарів:

Дописати коментар