>[danger]解释一下Js中的原型和原型链 JavaScript中的每个对象都有一个原型(prototype),代表了该对象所继承的属性和方法。当我们在访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,那么JavaScript引擎会自动到该对象的原型中查找,如果找到了相应的属性或方法,则会返回对应的值或执行对应的方法。 每个JavaScript对象都有一个**__proto__**属性,指向它的原型。如果一个对象的原型又有原型,那么它的**__proto__**属性就指向了其原型的原型,依次类推,**形成了一个原型链**。 最终,所有的对象都可以追溯到Object.prototype这个顶层原型。 >使用构造函数来创建JavaScript中的对象 我们可以**使用构造函数**来创建JavaScript中的对象,并通过给构造函数的prototype属性赋值来创建该构造函数实例的原型,例如: ```javascript // 构造函数Animal function Animal(name) { this.name = name; } // 为Animal的原型添加方法speak Animal.prototype.speak = function() { console.log(this.name + ' makes a noise.'); }; // 创建实例cat和dog let cat = new Animal('Miaow'); let dog = new Animal('Wangwang'); // 调用cat和dog的speak方法 cat.speak(); // Miaow makes a noise. dog.speak(); // Wangwang makes a noise. ``` 在以上代码中,Animal是一个构造函数,cat和dog是通过该构造函数创建的两个实例。通过给Animal的原型添加方法speak,我们可以让cat和dog都拥有该方法。 >参考链接 [原型及原型链](https://juejin.cn/book/6844733763675488269/section/6844733763759374350)