Давайте разберем инкапсуляцию и наследство в объектно-ориентированном JS.
1. Упаковка
Есть много методов реализации для инкапсуляции в JS, и вот несколько часто используемых.
1.1 Оригинальный объект генерации шаблонов
Напишите наших участников прямо в объект и верните их с помощью функции. Недостатки: трудно увидеть, что это пример шаблона.
Код:
Кода -копия выглядит следующим образом:
Функция stu (имя, оценка) {
возвращаться {
Имя: Имя,
Оценка: счет
}
}
var stu1 = stu ("zhang san", 80);
var stu2 = stu ("li si", 90);
console.log (stu1.name); // Чжан Сан
1.2 Сгенерировать построенные объекты шаблона
JS помогает нам обеспечить шаблон для генерации объектов с использованием конструкторов. Так называемый «конструктор» на самом деле является обычной функцией, но эта переменная используется внутри. Когда новое ключевое слово используется для генерации экземпляра конструктора, эта переменная будет связана с объектом экземпляра.
Прямая загрузка кода:
Кода -копия выглядит следующим образом:
Функция stu (имя, оценка) {
this.name = имя,
this.score = оценка
}
var stu1 = new Stu ("Zhang San", 80);
var stu2 = new Stu ("li si", 90);
console.log (stu1.name + "/" + stu2.score); // Zhang San90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)); // True True
console.log (((stu1 ancessionof stu) + "/" + (stu2 ancessionof stu)); // True True
Нетрудно видеть, что конструктор JS генерирует объекты, а C# с классом генерирует объекты. Оба используют шаблоны для определения элементов объекта экстремировать их с помощью новых ключевых слов.
Сгенерировать тот же объект STU, используя C# код
Кода -копия выглядит следующим образом:
Класс Стю
{
Общественное название строки;
общественный двойной счет;
}
Хорошо, вот основной объект. Так что теперь нам нужен метод, где все объекты распространены, и у нас есть этот метод, созданный только один раз. (Не создавайте неоднократно с новым объектом) Что мне делать? Все знают, что в C# мы можем использовать статические участники. Так как это сделать в JS?
1.3 Прототип режим
В JS каждый конструктор имеет атрибут прототипа, и все свойства и методы этого объекта будут унаследованы экземпляром конструктора. Затем добавление членов к прототипу напрямую эквивалентно объявлению статического члена в C#.
Код:
Кода -копия выглядит следующим образом:
Функция stu (имя, оценка) {
this.name = имя,
this.score = оценка
}
Stu.prototype.type = 'студент';
Stu.prototype.log = function (s) {
Консоль.log (ы);
}
var stu1 = new Stu ("Zhang San", 80);
var stu2 = new Stu ("li si", 90);
console.log (stu1.type + "/" + stu2.type); // студенты
stu1.log ('hello'); // привет
console.log (stu1.log == stu2.log); // истинный
Это все о инкапсуляции. Давайте посмотрим на то, как наследство реализовано в JS?
2. Наследство
2.1 Связывание конструктора
Вызовите или примените методы непосредственно в функции ребенка, чтобы связать конструктор родительского объекта с дочерним объектом.
Кода -копия выглядит следующим образом:
Функция stu (имя, оценка) {
Grade.apply (это, аргументы);
//Grade.call( Это аргументы);
this.name = имя,
this.score = оценка
}
функция Grade () {
this.code = "Junior High School";
this.ask = function () {
console.log ("Привет всем");
}
}
var stu1 = new Stu ("Zhang San", 80);
var stu2 = new Stu ("li si", 90);
console.log (stu1.code); // младшая средняя школа
stu1.ask (); // Всем привет
Применить две вещи здесь, поместите первый параметр в конструктор оценки (вызывающий абонент), а затем выполните код в классе. Это эквивалентно выполнению членов, определенных в классе с этим в Stu снова.
2.2 Наследование с помощью прототипа
Сначала посмотрите на код
Код:
Кода -копия выглядит следующим образом:
Функция stu (имя, оценка) {
this.name = имя,
this.score = оценка
}
функция Grade () {
this.code = "Junior High School";
}
Stu.prototype = new Grade ();
Stu.prototype.constructor = stu; // предотвратить расстройство цепочки наследования и сбросить декларацию вручную
var stu1 = new Stu ("Zhang San", 80);
var stu2 = new Stu ("li si", 90);
console.log (stu.prototype.constructor); // собственный конструктор
console.log (stu1.code); // младшая средняя школа
Как упоминалось ранее, прототип эквивалентен статическим членам в C#, поэтому мы превращаем всех членов родительского класса в их собственные статические члены для достижения наследования.
Существует недостаток наследства через прототип: все наследственные члены статичны, так как унаследовать членов объекта?
2.3 Копировать наследование
Скопируйте все свойства и методы родительского объекта в детском объекте, чтобы реализовать наследование.
Код:
Кода -копия выглядит следующим образом:
Функция stu (имя, оценка) {
this.name = имя,
this.score = оценка
}
функция Grade () {}
Grade.prototype.code = "Junior High School";
}
// Функциональная инкапсуляция
функция extend (c, p) {
var p = p.prototype;
var c = c.prototype;
для (var i in p) {
c [i] = p [i];
}
}
Extend (Stu, Grade);
var stu1 = new Stu ("Zhang San", 80);
var stu2 = new Stu ("li si", 90);
stu1.code = 'High School';
console.log (stu1.code); // Средняя школа
console.log (stu2.code); // младшая средняя школа
console.log (stu.prototype.constructor);
console.log (grad.prototype.constructor)
Это то, что я написал о объектно-ориентированной организации JS. Эта вещь не статичная. При его использовании внесите изменения в соответствии с вашими потребностями. Есть поговорка, которая идет очень хорошо, правильный - лучший.
Это анализируется только на инкапсуляцию и наследство. В будущем мы сделаем некоторые другие статьи, чтобы друзья могли более глубоко понимать объектно-ориентированное программирование JavaScript. Конечно, это все личное понимание. Если есть какие -либо упущения, пожалуйста, свяжитесь со мной.