原型,原型链,原型的继承

news/2025/2/19 16:29:52/

原型的作用?

1.节省内存空间

2.实现数据共享(继承)

什么是原型?

任何一个函数都有propotype属性,它本身是一个对象,我们称之为原型

构造函数,实例化对象与原型之间的关系?

1.任何一个函数都有prototype属性,它本身是一个对象,我们称之为原型

2.构造函数也是函数,也都有prototype属性,它本身是个对象,我们称之为原型

3.构造函数的原型对象上的属性和方法都可以被实例化对象所继承

4.任何一个对象都有constructor属性,实例化对象的constructor属性指向构造函数

5.原型也是对象,也有constructor属性,构造函数的原型对象的constructor属性指向构造函数

6.任何一个对象都有__proto__属性,实例化对象的__proto__属性指向构造函数的原型

在原型的函数中this的指向?

在原型的函数中,如果实例化对象调用该函数,this指向实例化对象,如果原型对象调用该函数,this指向原型对象

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>原型</title></head><body></body><script>// 结论一推理:function fn1() {}console.log(fn1)console.log(fn1.prototype)console.log(typeof fn1.prototype)console.log(fn1.prototype instanceof Object) //trueconsole.log(fn1.prototype instanceof Array)// 结论二推理:function Car(brand) {this.brand = brand// this.color = colorthis.run = function () {console.log(this.brand + '会行驶!')}}// 结论三的推理Car.prototype.color = '黑色'Car.prototype.playVideo = function () {console.log(this)console.log(this.brand + '可以放音乐')}Car.prototype.playVideo()console.log(Car.prototype)var car1 = new Car('路虎')console.log(car1)var car2 = new Car('法拉利')console.log(car2)var car3 = new Car('宾利')console.log(car3)console.log(car1.color)console.log(car2.color)console.log(car3.color)car1.playVideo()car2.playVideo()car3.playVideo()// 结论四:上午的推理// 结论五的推理console.log(Car.prototype.constructor)// 结论六:console.log(car1.__proto__)console.log(Car.prototype);console.log(Car.prototype.__proto__);console.log(Object.prototype);console.log(Object.prototype==Car.prototype.__proto__);console.log(Car.prototype.prototype==Object.prototype);console.log(Car.prototype==Function);
console.log(Car.constructor);
console.log(Car.prototype.__proto__==Object.prototype)console.log(window.history.__proto__)var obj = {}console.log(obj.__proto__)</script>
</html>

原型链

在javascript中每个对象都会有一个__proto__属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去__proto__里去找这个属性,这个__proto__又会有自己的__proto__,于是就这样一直找下去,这就是原型链的概念

原型链最终指向null

实例化对象的属性查找规则

先从原型链上查找,有就返回,如果没有就时undefined或者报错

将原型对象写成字面量形式会丢失constructor属性,如何解决?

既然是字面量形式,那么加上即可

原型的继承

原型继承是将父元素的实例对象当做子元素构造函数的原型对象。

 

    //  构造函数function student(name, age) {this.name = namethis.age = age}// 实例化对象let s1 = new student('张三', 18)// 子元素通过自己的原型对象的原型和父元素(object)的原型对象对比// 如果相等就代表他们指向的是同一个原型对象console.log(s1.__proto__.__proto__ === Object.prototype)//true// 子元素通过自己原型的原型去找自己的父元素console.log(s1.__proto__.__proto__.constructor)//object


http://www.ppmy.cn/news/484821.html

相关文章

原型和原型链详细讲解

目录 一、构造函数 二、原型对象 三、原型链 四、函数也是一种对象 五、总结 一、构造函数 构造函数、普通函数区别&#xff0c;使用new关键字创建对象的函数叫构造函数。构造函数的首字母一般是大写&#xff0c;用以区分普通函数。 function Person(name, age) {this.nam…

硬核!原型和原型链详解

前言 我是歌谣 知其然知其所以然 人人都有一个大厂梦 希望通过自己的一个总结分享可以给予大家带来帮助和提升。 本期知识点 原型和原型链 目标 1理解原型和原型链 2理解构造函数 3理解构造函数 原型和原型链之间的关系 引用类型都是对象 基本数据类型和引用数据类型可以看下…

【原型和原型链】什么是原型和原型链

一、原型 ①所有引用类型都有一个__proto__(隐式原型)属性&#xff0c;属性值是一个普通的对象 ②所有函数都有一个prototype(原型)属性&#xff0c;属性值是一个普通的对象 ③所有引用类型的__proto__属性指向它构造函数的prototype var a [1,2,3]; a.__proto__ Array.pro…

原型链详解

什么是原型链 原型链就是顺着__proto__所在的一条链子&#xff0c;这样说可能不是很好理解&#xff0c;下面来看例子你就会理解。 需要了解 1.a.__proto__和 a.prototype都称做为a的原型。 2.Object.prototype是原型链的顶端。 3.如果 a是由b实例化出来的&#xff0c;则有关…

(二)原型和原型链

文章目录 一、原型和原型链1.构造函数2.为什么要一个原型对象&#xff1f;3.两个属性&#xff1a;prototype与__proto__4.原型链 二、new和Object.create的区别1.Object.create的使用2.二者区别 一、原型和原型链 在接触原型与原型链中&#xff0c;我产生了以下几个疑问&#…

最详尽的 JS 原型、js原型链终极详解(第二篇)

四. proto JS 在创建对象&#xff08;不论是普通对象还是函数对象&#xff09;的时候&#xff0c;都有一个叫做__proto__ 的内置属性&#xff0c;用于指向创建它的构造函数的原型对象。 对象 person1 有一个 __proto__属性&#xff0c;创建它的构造函数是 Person&#xff0c;构…

原型及原型链详解

&#xff08;首先先大致的介绍一下什么是原型与原型链及相关术语&#xff0c;以便初学者有个大概的了解&#xff09; 原型&#xff1a;被用于复制现有实例来生成新实例的函数 &#xff08;这里补充一个设计模式为原型模式&#xff0c;即用原型实例指定创建对象的种类&#xff…

产品思维的核心要素

产品思维的关键词 如果说用几个关键词来总结 “产品思维” &#xff0c;我会用以下几个关键词来概括它&#xff0c;分别是&#xff1a;"4高"、"1深"、"3广" &#xff0c;具体怎么理解&#xff0c;我们接下来一个一个的说。 4高 先来看一看 4高…