用户定义的函数如何在javascript中继承原型属性

时间:2018-07-06 09:31:22

标签: javascript function object prototype

我很困惑,有人可以用javascript来指导,如果Function对象的原型属性(Function.prototype)没有原型属性,那么用户定义的函数怎么会自动具有其原型属性。像

function f(){
}
f.prototype.

谢谢

2 个答案:

答案 0 :(得分:0)

  
    

JavaScript中几乎所有对象都具有prototype属性。通过使用它,更具体地说,是使用原型链,我们可以模仿继承。原型是对另一个对象的引用,当JS在当前对象上找不到您要查找的属性时,就会使用该原型。简而言之,只要您在对象上调用属性而该属性不存在,JavaScript就会转到原型对象并在其中查找。如果找到它,它将使用它;否则,它将转到该对象的属性并在其中查找。这可以在返回undefined之前一直冒泡到Object.prototype。这是原型链的本质,也是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

答案 1 :(得分:0)

实际上,Function对象确实具有原型属性,这是MDN Inheritance and prototype chain的摘录:

function f() {
  return 2;
}

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

为了更好地理解原型链,建议您阅读以下文章:JS Prototype chain mechanism