美文网首页
js原型和原型链,继承

js原型和原型链,继承

作者: xuehairong | 来源:发表于2024-08-05 18:13 被阅读0次

使用__proto__来解释继承原理可以帮助理解 JavaScript 的原型链机制

基本概念

__proto__:是一个非标准的属性,指向对象的原型。实际上,__proto__ 是对象内部的[[Prototype]]属性的非标准访问方式。在现代 JavaScript 中,可以使用 Object.getPrototypeOf()Object.setPrototypeOf()代替。

继承原理的解释

  1. 构造函数与原型设置:
  • 创建一个构造函数,例如 Animal
  • 通过设置构造函数的 prototype 属性来定义实例共享的方法。
  • 新创建的对象的 __proto__指向构造函数的 prototype
function Animal(name) {
  this.name = name;
}

Animal.prototype.say = function() {
  console.log('I am an animal');
};

在这个例子中:

  • Animal.prototypeAnimal 构造函数的原型对象。
  • Animal.prototype.__proto__指向 Object.prototype(原型链的顶端)。
  1. 创建继承关系:
  • 创建另一个构造函数 Mammal,并设置 Mammal.prototype 的原型为 Animal.prototype
function Mammal(name, furColor) {
  Animal.call(this, name); // 继承 Animal 的属性
  this.furColor = furColor;
}

Mammal.prototype = Object.create(Animal.prototype);
Mammal.prototype.constructor = Mammal;

在这个例子中:

  • Mammal.prototype__proto__被设置为 Animal.prototype。也就是说,Mammal.prototype.__proto__指向 Animal.prototype
  1. 实例的原型链:
  • 创建 Mammal实例时,实例的__proto__ 指向 Mammal.prototype,而 Mammal.prototype.__proto__ 指向 Animal.prototype
const mammal = new Mammal('Lion', 'golden');

在这个例子中:

  • mammal.__proto__Mammal.prototype
  • mammal.__proto__.__proto__(即 Mammal.prototype.__proto__)是 Animal.prototype
  1. 访问属性和方法:
  • 当访问 mammal 的属性或方法时,JavaScript 引擎会首先检查 mammal 本身。
  • 如果在 mammal 中找不到,JavaScript 引擎会沿着原型链查找,即检查 mammal.__proto__mammal.__proto__.__proto__,直到找到或到达原型链的顶端(Object.prototype)。
console.log(mammal.name);           // 输出: Lion (直接从实例对象中找到)
console.log(mammal.furColor);       // 输出: golden (直接从实例对象中找到)
console.log(mammal.say());          // 输出: I am an animal (从 Animal.prototype 找到)

在这个例子中:

  • mammal 直接拥有 namefurColor 属性。
  • say方法是从 Mammal.prototype.__proto__(即 Animal.prototype)中继承的。

总结

子类的 prototype 的 __proto__ 指向父类的 prototype,形成一个原型链。
实例对象的 __proto__ 指向实例的构造函数的 prototype,从而允许访问继承的属性和方法。
这个机制使得 JavaScript 实现了对象的继承和方法的共享。希望这个解释有帮助!

相关文章

  • js实现继承的几种方式

    js实现继承有几种方式,这里我们主要探讨 原型链继承 构造继承 组合继承(原型链和构造继承组合到一块,使用原型链实...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

  • 关于JS中的原型和原型链

    目录 关于js 对象和原型 原型链 基于原型链的继承 参考资料ECMAScript 6 入门JavaScript原...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • Javascript(三)之原型继承理解

    进阶路线 3 原型继承 3.1 优秀文章 最详尽的 JS 原型与原型链终极详解 一 最详尽的 JS 原型与原型链终...

  • 浅析JS继承方法

    JS 实现继承的方法有:1.原型链继承2.构造函数继承3.组合继承(原型链继承 + 构造函数继承)4.原型式继承(...

  • javascript中的原型链与继承

    javascript中的原型链与继承javascipt中的原型链和继承机制是这门语言所特有的,但js中的原型机制也...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

网友评论

      本文标题:js原型和原型链,继承

      本文链接:https://www.haomeiwen.com/subject/slnxkjtx.html