用户定义函数如何在javascript中继承prototype属性

用户定义函数如何在javascript中继承prototype属性,javascript,function,object,prototype,Javascript,Function,Object,Prototype,我很困惑,在javascript中,如果函数对象(Function.prototype)的prototype属性没有prototype属性,那么为什么用户定义的函数会自动拥有prototype属性呢。像 function f(){ } f.prototype. 谢谢 JavaScript中几乎所有对象都具有prototype属性。通过使用它,更具体地说是原型链,我们可以模仿继承。原型是对另一个对象的引用,当JS在当前对象上找不到您要查找的属性时,就会使用它。简单地说,每当你调用一个对象上的属性

我很困惑,在javascript中,如果函数对象(Function.prototype)的prototype属性没有prototype属性,那么为什么用户定义的函数会自动拥有prototype属性呢。像

function f(){
}
f.prototype.
谢谢

JavaScript中几乎所有对象都具有prototype属性。通过使用它,更具体地说是原型链,我们可以模仿继承。原型是对另一个对象的引用,当JS在当前对象上找不到您要查找的属性时,就会使用它。简单地说,每当你调用一个对象上的属性而它不存在时,JavaScript就会转到原型对象并在那里寻找它。如果找到它,它将使用它,如果没有,它将转到该对象的属性并查看那里。这可能会在返回undefined之前一直冒泡到Object.prototype。这是原型链的本质,也是JavaScript继承背后的行为

功能动物(名称){
this.name=名称;
}
Animal.prototype.sleep=函数(){
console.log(this.name+':Zzz…);
}
功能狗(名称){
this.name=名称;
}
//为原型创建一个参考
Dog.prototype=Object.create(new Animal());
Dog.prototype.makeSound=函数(){
console.log(this.name+':Woof-Woof!');
}
var dog=新狗(“Lassie”);
dog.makeSound();//莱西:汪汪!
dog.sleep();//莱西:Zzz。。。

dog.missing();//抛出错误
事实上,函数对象确实有一个原型属性,这是MDN的摘录:


为了更好地理解prototype链,我建议您阅读以下帖子:。

所有javascript函数都有prototype属性。
function f() {
  return 2;
}

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