как пользовательская функция наследует свойство прототипа в JavaScript - PullRequest
0 голосов
/ 06 июля 2018

Я в замешательстве, может кто-нибудь подсказать, в javascript, если свойство prototype объекта Function (Function.prototype) не имеет свойства prototype, тогда как полученная пользователем функция автоматически получает свойство prototype. как

function f(){
}
f.prototype.

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Фактически, у объекта Function есть свойство prototype, это отрывок из цепочки наследования и прототипа MDN :

function f() {
  return 2;
}

// Functions inherit from Function.prototype 
// (which has methods call, bind, etc.)
// f ---> Function.prototype ---> Object.prototype ---> null

Для лучшего понимания цепочки прототипов, я рекомендую вам прочитать следующий пост: Механизм цепочки прототипов JS .

0 голосов
/ 06 июля 2018

Почти все объекты в JavaScript имеют свойство prototype. Используя его, а точнее цепочку прототипов, мы можем имитировать наследование. Прототип является ссылкой на другой объект и используется всякий раз, когда JS не может найти свойство, которое вы ищете, в текущем объекте. Проще говоря, всякий раз, когда вы вызываете свойство объекта, а оно не существует, JavaScript будет переходить к объекту-прототипу и искать его там. Если он найдет его, он будет использовать его, если нет, то перейдет в свойство этого объекта и заглянет туда. Это может привести к появлению Object.prototype до возврата undefined. В этом суть цепочки прототипов и поведение, стоящее за наследованием JavaScript.

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

Animal.prototype.sleep = function() {
    console.log(this.name + ': Zzz...');
}

function Dog(name) {
    this.name = name;
}

// Create a reference for the prototype
Dog.prototype = Object.create(new Animal());

Dog.prototype.makeSound = function() {
    console.log(this.name + ': Woof woof!');
}

var dog = new Dog('Lassie');
dog.makeSound(); // Lassie: Woof woof!
dog.sleep(); // Lassie: Zzz...
dog.missing(); // Throws Error

Полная ссылка: https://hackernoon.com/understanding-javascript-prototype-and-inheritance-d55a9a23bde2

...