原型链和原型链的继承

原型链和原型链的继承

这么宽泛的话题怎么描述?
1:从老大开始讲 表示对老大的尊敬
所有普通的prototype链都指向老大 Object.prototype 其包含了许多通用的功能(toString)
2: 所有的函数都会拥有prototype属性 对于普通函数来讲 没有什么用 但是对于构造函数而言 用处极大
3:对象一定拥有__proto__属性
实例的原型对象,就是构造函数的原型

什么是原型链?

通过原型链接的逐级向上的查找机制叫做原型链

当我们试图去访问一个对象身上的属性的时候,如果在它身上没有找到,就会去访问这个对象的原型 如果还没找到 就去找它原型的原型,直至找到老大
Object.prototype 还找不到就返回空 这种通过原型链接的逐级向上的查找机制就成为原型链
注:hasOwnProperty不会查找原型链

什么是原型继承?

一个对象可以使用另一个对象的属性和方法成为继承
具体就是将这个对象的prototype设置为另一个对象的实例
JS中继承的口号 子类的prototype等于父类的某一个实例
student.prototype = new People()
这样的话根据原型链的规则 当查找子类的属性且不存在时 就会去查找父类的属性 这样就实现了一个对象使用另一个对象的属性或方法 就实现了继承

为什么方法要写在构造函数的原型里 属性要写在构造函数里?

因为写在构造函数里的东西 当你创建两个对象 将拥有两个副本 但是函数的话天生是要被复用的 所以这样就比较浪费内存。

JS 原型和实例的关系

从构造函数开始,描述那个三角关系就可以了
每一个构造函数都有一个prototype属性指向原型对象,这个原型对象也有一个指针指向constructor,通过构造函数new出来的实例对象,有一个__proto__属性指向原型对象

ES6的class

直接为这个类的函数对象添加方法,而不是添加到原型对象中

小练习

1 People.prototype.constructor = People //指向构造函数 没有问题
2 xiaoming.constructor?
因为有原型链查找机制所以说xiaoming.constructor = People.prototype.constructor = People

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中的原型链(prototype chain)和继承是面向对象编程的重要概念,它们是JavaScript特有的实现继承的方式,与传统的类-实例模型不同。 1. 原型链:每个JavaScript对象都有一个内置的[[Prototype]]属性,指向另一个对象。当你试图访问一个对象的属性或方法时,如果该对象自身没有这个属性,JavaScript会沿着原型链向上查找,直到找到或者到达原型链的顶端(`Object.prototype`)。这就是原型链的工作原理,它使得子类可以访问父类的方法和属性。 2. 继承:在JavaScript中,继承是通过原型链实现的。通常,我们会创建一个构造函数(也称为原型的构造函数),然后用它来创建一个新的对象,这个新对象会自动获得原型(构造函数的实例)的所有属性和方法。子类(构造函数的新实例)就通过这种方式“继承”了父类的特性。 举个例子: ```javascript function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(this.name + ' makes a sound.'); } function Dog(name, breed) { Animal.call(this, name); // 使用构造函数的call方法来设置原型链 this.breed = breed; } Dog.prototype = Object.create(Animal.prototype); // 创建子类的原型并指向父类 Dog.prototype.constructor = Dog; // 修正构造函数指针 // 创建子类实例 let myDog = new Dog('Rex', 'Labrador'); myDog.speak(); // 输出 "Rex makes a sound." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值