我很困惑,有人可以用javascript来指导,如果Function对象的原型属性(Function.prototype)没有原型属性,那么用户定义的函数怎么会自动具有其原型属性。像
function f(){
}
f.prototype.
谢谢
答案 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。