Автор оригинала: 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);
Таким образом, мы можем весь прототип цепь. Здесь, если я позвоню
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 () {}
Отказ