JavaScript从入门到精通系列第二十一篇:JavaScript中的原型对象详解

news2024/11/20 8:40:43

文章目录

前言

一:原型对象

1:什么是原型对象

2:原型对象的作用

 3:通过原型对象实现工厂方法

二:原型对象咋说

 1:in和原型对象

2:hasOwnProperty()函数

3:hasOwnProperty()来历

   


前言

        我们讲,尽量不要把全局作用域当中声明变量。将函数在全局作用域中污染了全局作用域的命名空间。

function fun(){
    alert("hello大家好我是:"+this.name);
}

        定义在全局作用域当中是非常不安全的,后边容易把前边的给覆盖掉。那么我们应该怎么办呢?

一:原型对象

1:什么是原型对象

        我们没创建一个函数对象,解析器都会往函数中添加一个属性prototype。只要是函数,不论是构造函数还是普通函数,都会解析器都会放进去这个东西,每一个函数都会有属于他自己的prototype

        证明一下这个东西:

function Person(){

}

console.log(Person.prototype)

        这个prototype属性对应了一个对象,他就是一个原型对象。 

2:原型对象的作用

        原型对象是为了构造函数而生,对于普通函数,毛用没有。

       构造函数对象和通过构造函数对象创建出来的任何一个对象,两者prototype属性指向的对象是一个,并且这个属性名称叫__proto__,哈哈,这倒霉名字。

        值得注意的是,构造函数中的指向这个原型对象的属性是prototype,而在基于构造函数创建出来的对象中这个属性是__proto__,这是一个隐藏属性

        也就是说:Person.prototype == per.__proto__   结果为true

        证明这件事情:

function Alibaba(){

}

var ali = new Alibaba();
console.log(ali.__prototype__ == Alibaba.__prototype__);

        原型对象就相当于这个对象,或者叫这个类的一个公共区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中公共的东西放到这个原型对象当中。

        当我们访问对象的一个属性或者方法时,会先在对象自身中找,如果有则直接使用,如果没有直接去原型对象中找

        证明这件事情:

function Person(){
    

}
Person.prototype.a = 123;


console.log(Person.a);

        如果person对象当中也有这个属性呢?那么会直接在对象中找。

        说到这里,我们就非常明显了,我们应该把sayName这个方法放到原型对象当中这个方式是最好的。

 3:通过原型对象实现工厂方法

function Person(){ 

}

Person.prototype.sayName = function (){
    console.log(this);
    console.log(this.name)
}

function createPerson (name,age,gender){
    var per = new Person();
    per.name = name;
    per.age = age;
    per.gender = gender;
    return per;
}
var per = createPerson("悟空",18,1);
per.sayName();

        日后,我们创建构造函数或者叫类的时候,我们可以将这些对象共有的属性和方法统一添加到构造函数的原型对象当中,这样不会为了每一个对象添加,也不会影响全局作用域,就可以让每一个对象都可以使用这些属性和方法了。

二:原型对象咋说

 1:in和原型对象

function Person(){

}

Person.prototype.name = "";

var per= new Person();

console.log("name" in per);

        使用in检查对象当中是否含有某个属性的时候,如果这个属性在原型对象当中依旧会返回ture。

        证明这件事情:

2:hasOwnProperty()函数

        每个对象都有这个函数。

        使用这个函数可以排除原型对象的干扰,从而检查对象自身的属性

        证明这件事情:

3:hasOwnProperty()来历

        这个函数位于原型对象当中。但是还是有一个问题,原型对象当中我们也没加,那到底是咋进去的呢?

        原型对象也是对象,所以原型对象也有原型对象。当我们使用一个对象的属性或者方法时,会现在自身中进行寻找,如果自身中有则直接使用。如果自身中没有则去原型对象中去寻找。如果原型对象中有则使用,如果原型对象中也没有则去原型对象的原型对象去寻找。        

        直到找到Object对象的原型,Object对象的原型没有原型,如果Object对象的原型中依旧没有,那就返回undefined。

function Person(){

}

Person.prototype.name = "";

var per= new Person();

console.log(per.__proto__.hasOwnProperty("hasOwnProperty"));
console.log(per.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));
console.log(per.__proto__.__proto__.__proto__);

           per.__proto__是Object类型的对象。per.__proto__.__proto__是这个Object对象的原型对象,这样操作原型对象也就原型到头了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

armbian安装gcc、g++

文章目录 安装GCC安装G 安装GCC 打开终端&#xff0c;更新软件包列表&#xff1a; sudo apt update安装GCC&#xff1a; sudo apt install gcc如果需要安装特定版本的GCC&#xff0c;可以使用以下命令&#xff1a; sudo apt install gcc-<version> # sudo apt install g…

苹果手机怎么查找对方手机位置?学会这2个方法足够了!

查找功能是什么&#xff1f;相信使用苹果手机的用户都不陌生。苹果手机的查找功能可以帮助您精准定位设备的位置。当您的手机丢失且无法找回时&#xff0c;那么查找功能就可以发挥它的用处了。 定位自己的手机&#xff0c;大家都知道怎么做。那么&#xff0c;苹果手机怎么查找…

关于opencv的contourArea计算方法

cv::contourArea计算的轮廓面积并不等于轮廓点计数&#xff0c;原因是cv::contourArea是基于Green公式计算 老外的讨论 github 举一个直观的例子&#xff0c;图中有7个像素&#xff0c;橙色为轮廓点连线&#xff0c;按照contourArea的定义&#xff0c;轮廓的面积为橙色所包围…

如何调整模型缩放比例

1、缩放模型的几种方法 在3D建模软件中&#xff0c;通常有几种方式可以缩放模型。以下是两种常见的方法&#xff1a; 使用缩放工具&#xff1a;大多数3D建模软件都提供了缩放工具&#xff0c;可以通过选择模型并使用该工具来进行缩放。通常&#xff0c;您可以在工具栏或菜单中…

vivado 脚本使用——loogarch指令集 实验exp6

首先从Window-tcl console 调出终端 然后执行进入指定目录 也就是run_vivado 目录 然后打开Tools——Run Tcl script&#xff0c;执行create_project.tcl文件&#xff0c;静待完成。

1、Flowable基础

Flowable是BPMN的一个基于java的软件实现&#xff0c;不过Flowable不仅仅包括BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有自己的用户管理、微服务API等一系列功能&#xff0c;是一个服务平台。 官方手册&#xff1a;https://tkjohn.github.io/flowab…

21款奔驰GLS400升级小柏林音响 无损音质 无损安装

小柏林之声音响是13个喇叭1个功放&#xff0c;功率是590W&#xff0c;对应普通音响来说&#xff0c;已经是上等了。像著名的哈曼卡顿音响&#xff0c;还是丹拿音响&#xff0c;或者是BOSE音响&#xff0c;论地位&#xff0c;论音质柏林之声也是名列前茅。 升级小柏林音响&…

2023年8月PMP考试成绩出炉|微思通过率95%以上

热烈祝贺一大波微思学员通过 PMP 认证考试 PMP 认证课程介绍 部分学员成绩单 PMP课程涵盖了项目整合管理、项目范围管理、项目进度管理、项目资源管理、项目采购管理等内容。 国际注册项目管理师(PMP) 证书是项目管理领域含金量最高的职业资格证书&#xff0c;获得该资质是…

oracle 表空间详解以及配置操作

Oracle 数据库是由若干个表空间构成的。任何数据库对象在存储时都必须存储在某个 表空间中。表空间对应于若干个数据文件&#xff0c;即表空间是由一个或多个数据文件构成的。 1、常用表空间&#xff1a; 系统表空间 (system tablespace) 是每个 Oracle 数据库都必须具备的。…

抖音小程序制作源码系统 带完整搭建教程

在当今社交媒体时代&#xff0c;抖音作为一款备受欢迎的短视频应用&#xff0c;已经拥有了庞大的用户群体。与此同时&#xff0c;抖音小程序也成为了商家和开发者们关注的热点。今天小编就来给大家介绍一款抖音小程序制作源码系统&#xff0c;五分钟确实创建一个小程序。 系统特…

3D教程 | 在3D可视化引擎HOOPS Visualize中如何调整场景灯光亮度

在HOOPS Visualize场景中使用远光时&#xff0c;您可能需要调整亮度&#xff0c;并在最暗和最亮的面孔之间获得更好的对比度。 HOOPS中文网查HOOPS中文网查 太亮了 将模型的镜面反射值更改为灰色以降低亮度&#xff0c;或更改为黑色以消除面上的火花&#xff1a; ModelKey.Ge…

自2023年下半年起,软考各级别、各资格、各科目考试方式均由纸笔考试改革为计算机化考试,软考的所有考试科目均改为机考

自2023年下半年起&#xff0c;软考各级别、各资格、各科目考试方式均由纸笔考试改革为计算机化考试&#xff0c;软考的所有考试科目均改为机考。包括高项的综合知识、案例分析、论文&#xff0c;所有考试科目均改为在计算机上作答。 2023年下半年软考实行机考后&#xff0c;关…

企业文件传输使用网盘好还是大文件传输软件好?

在当今的信息化时代&#xff0c;企业之间的沟通和协作离不开文件的传输。无论是内部的工作报告、合同文档、设计图纸&#xff0c;还是外部的客户资料、产品介绍、项目方案&#xff0c;都需要通过网络进行快速、高效、安全的发送和接收。那么&#xff0c;企业在进行文件传输时&a…

[python 刷题] 19 Remove Nth Node From End of List

[python 刷题] 19 Remove Nth Node From End of List 题目&#xff1a; Given the head of a linked list, remove the nth node from the end of the list and return its head. 题目说的是就是移除倒数第 n 个结点&#xff0c;如官方给的案例&#xff1a; 这里提供的 n 就是…

图像分块及拼接(二)python代码

图像分块及拼接 问题python 代码效果图 问题 图像分块及拼接代码中对图像分块不均匀&#xff0c;本文给出的代码&#xff0c;图像分块大小相同。改进方法&#xff1a;图像分块不均匀时&#xff0c;填充事情shape相同 python 代码 import numpy as np import cv2 as cv impor…

一百九十一、Flume——Flume配置文件各参数含义

一、目的 在实际项目的开发过程中&#xff0c;不同Kafka主题的数据规模、数据频率&#xff0c;需要配置不同的Flume参数&#xff0c;而这一切的调试、配置工作&#xff0c;都要建立在对Flume配置文件各参数含义的基础上 二、Flume各参数及其含义 &#xff08;一&#xff09;…

深入探究音视频开源库 WebRTC 中 NetEQ 音频抗网络延时与抗丢包的实现机制

目录 1、引言 2、什么是NetEQ&#xff1f; 3、NetEQ技术详解 3.1、NetEQ概述 3.2、抖动消除技术 3.3、丢包补偿技术 3.4、NetEQ概要设计 3.5、NetEQ的命令机制 3.6、NetEQ的播放机制 3.7、MCU的控制机制 3.8、DSP的算法处理 3.9、DSP算法的模拟测试 4、NetEQ源文件…

【发表案例】IF4+,2区SCI期刊,2个月零3天录用,11天见刊!网络安全领域均可

计算机类SCIE 【期刊简介】IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCIE 在检&#xff0c;正刊 【征稿领域】提高安全性和隐私性的边缘/云的智能方法的研究&#xff0c;如数字孪生等 【截稿日期】5篇版面 录用案例&#xff1a;2个月零…

VTK 标注类Widget 文字标注 vtkCaptionWidget

目录 Part1: 简介 Part2: 效果 Part3: example Part1: 简介 vtkCaptionWidget:用一个带线框及箭头的文本信息来标注某一对象&#xff1b; 在可视化程序中&#xff0c;经常会对某个对象做一些标注说明&#xff1b; 如&#xff0c;在医学图像诊断中&#xff0c;常常会手动标注…

流量回放工具

作用 在评估某个服务可用性时&#xff0c;一种常见方式是采用一些压测工具(如ab/hey/jmeter/siege/wrk/locust等)压测某几个核心接口&#xff0c;一般看达到某个TPS/QPS时&#xff0c;CPU/内存等资源的水位&#xff1b;或者固定资源的阈值&#xff0c;看最高能达到的TPS/QPS。 …