Рубрики
Без рубрики

Прототип в JavaScript

Быстрый обзор прототипа в JavaScript.

Автор оригинала: Sandeep Ranjan.

По умолчанию каждая функция имеет имя свойства в качестве прототипа, который является Пустой ( По умолчанию ). Мы можем добавить свойства и методы к нему.

Примечание. Каждая функция – функция конструктора в JS.

Допустим, у нас есть функция х и создать объект х х как х1 наследует прототип х Отказ

var x = function(j) {
  this.i = 0;
  this.j = j;
  
  this.GetJ =  function() {
  	return this.j;
  }
}

var x1 = new x(2);

console.log(x1); 
  // > x {i: 0, j: 2, GetJ: ƒ}
 
console.log(x1.GetJ());
  // > 2

Примечание: когда дело доходит до конструктора функций это Не относится к функции, которая содержит ее, но это относится к объектам, которые будут созданы функциями конструктора.

Теперь я могу создать как мой объект, который я хочу, и каждый объект, созданный из X, будет иметь Getj () метод, прикрепленный к нему, который добрый на плохой Отказ Решением это Прототип Отказ

Так что мы берем Getj () Метод и это к прототипу х Отказ

var x = function(j) {
  this.i = 0;
  this.j = j;
}

x.prototype.GetJ =  function() {
  	return this.j;
 }

var x1 = new x(2);

console.log(x1); 
  // > x {i: 0, j: 2}
 
console.log(x1.GetJ());
  // > 2

Но мы все еще получаем правильный выход, так как он ведет себя так же, как до того, как только дифференцировано, в том, что х1 не имеет своего Getj () метод. Таким образом, он смотрит в цепочку прототипа (в родительском языке) и находит метод Getj () Отказ

Примечание: Цепочка прототипа : Таким образом, каждая функция в JavaScript создана из главного объекта.

Здесь X -> Функция -> Объект Так что, если мы позвоним методом от х Если эта корпусная функция не в х Он будет выглядеть вверх и вверх, пока он не найдет его в Цепочка прототипа, если функция не существует в цепи, она будет отображаться undefined Отказ

Для E.G.

var x = function() {
}

console.dir(x);
Застрел на экране 2018-05-22 в 6 13 34 вечера

Таким образом, мы можем весь прототип цепь. Здесь, если я позвоню

console.log(x.toString());
// > function() {
// >
// >  }

Здесь х не имеет TOSTRING () Метод, но он поднимается и находит его в цепочке прототипа.

Прототипы в глубине

Как мы знаем, JavaScript не имеет кладов, как Java. Здесь я покажу вам, как создать подкласс из базового класса.

//Baseclass
var Bookshop = function() {
  this.cost = 100;
}

Bookshop.prototype.bill = function() {
  console.log('Your Bill is: $'+ this.cost);
}

Здесь Книжный магазин Наш базовый класс со способом Билл () В нем прототип.

//Subclass
 var BuyBook = function(title,cost) {
  Bookshop.call(this); // Statement 1
  
  this.title = title;
  if(cost) 
    this.cost = cost ;
 }

BuyBook.prototype = Object.create(Bookshop.prototype); // Statement 2
BuyBook.prototype.constructor = BuyBook; // Statement 3

Теперь у меня есть подкласс Кукурук базовой базовой массы Книжный магазин Отказ

Объяснение

  • Заявление 1 : Bookshop.call (это); Отказ Эта линия позвонит конструктору и устанавливает это значение. Так в Buckbook: это = {; } Отказ

  • Заявление 2 : Buckbook.prototype.create (книжный магазин.prototype); Отказ Эта линия помогает наследовать от Книжный магазин. Прототип Отказ

  • Заявление 3 : Buckbook.prototype.constructor; Отказ Эта строка устанавливает конструктор для BucyBook I.e Метод Buybook.

 var person_1 = new BuyBook('GOT', 200);
 var person_2 = new BuyBook('Harry Potter');

 person_1.bill();
 //> Your Bill is: $200
 person_2.bill();
 //> Your Bill is: $100

Вот как мы можем позвонить выполнять наследство. Вы также можете перезаписать Билл () Метод определен новым методом в Buckbook.prototype.bill () {} Отказ