web前端javaScript笔记——(5)原型对象和垃圾回收

原型对象

原型对象prototype

我们所创建的每一个函数,机械其都会向函数中添加一个属性prototype

这个属性对应着一个对象,这个对象就是我们所谓的原型对象

function Person(){}

console.log(Person.prototype);//Object

如果函数作为普通函数调用prototype没有任何作用

当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性

指向该构造函数的原型对象,我们可以通过__proto__来访问该属性(是两个小的下划线)

function Person(){}

console.log(Person.prototype);//Object

function MyClass(){

}

var mc=new MyClass();

console.log(mc.__proto__); //Object

console.log(mc.__proto__==MyClass.prototype);  //true

原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,

我们可以将对象中共有的内容,统一设置到原型对象中

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

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

function MyClass(){

}

//向MyClss的原型对象中添加属性a

MyClass.prototype.a=123;

var mc=new MyClass();

var mc2=new MyClass();

//console.log(mc2.__proto__==MyClass.prototype);    //true

console.log(mc.a);   //123

//向mc中添加a属性

mc.a="我是mc中的a";

console.log(mc.a);    //我是mc中的a

//向MyClass的原型中添加一个方法

MyClass.prototype.sayHello=function(){

alert("hello");

};

mc.sayHello();  //弹出hello

向原型对象中添加sayName方法

Person.prototype.sayName=function(){

alert(“Hello大家好,我是:”+this.name};};

原型对象里也有原型

function MyClass(){

}

//向MyClss的原型对象中添加一个name属性

MyClass.prototype.name="我是原型中的名字";

var mc=new MyClass();

mc.age=18;

//使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true

console.log("name" in mc);   //true

//可以使用对象的hasOwnProperty()来检查对象自身中是否含有该属性

//使用该方法只有当对象自身中含有属性时,才会返回true

console.log(mc.hasOwnProperty("name"));   //false

console.log(mc.hasOwnProperty("age"));   //true

console.log(mc.__proto__.hasOwnProperty("hasOwnProperty"));  //false

原型对象也是对象,所以它也有原型,

当我们使用一个对象的属性或方法时,会现在自身中寻找,

自身中如果有,则直接使用,

如果没有则去原型对象中寻找,如果原型对象中与,则使用,

如果没有则去原型的原型中寻找直到找到Object对象的原型,

Object对象的原型没有原型,如果在Object中依然没有找到,则返回undefined

console.log(mc.__proto__.__proto__);  //打印输出[object Object]

console.log(mc. __proto__.__proto__.hasOwnProperty("hasOwnProperty"));  //true

console.log(mc.__proto__.__proto__.__proto__);  //null

//当我们直接在页面中打印一个对象时,事件上是输出的对象的tostring()方法的返回值

var result = per.toString();

console.log("result ="+ result);  //result=[object Object]

console.log(per.hasOwnProperty("toString"));            //false

console.log(per.__proto__.hasOwnProperty(“toString”));    //false

console.log(per.__proto__.__proto__.hasOwnProperty(“toString”));    //true

如果我们希望在输出对象时不输出[object object],可以为对象添加一个toString()方法

function Person(name  age , gender){

this.name = name;

this.age = age;

this.gender = gender;

}

//创建一个Person实例

var per = new Person("孙悟空",18,"男");

var per2 = new Person("猪八戒”,28,"男");

console.log(per2);         //依旧是[object Object]

per.toString = function(){

return "Person[name=孙悟空,age=18,gender=男]”};

console.log(per);  //”Person[name=孙悟空,age=18,gender=男]"

per.toString = function(){return "我是一个快乐的小Person";};

console.log(per);         //我是一个快乐的小Person

//修改Person原型的toString

Person.prototype.toString=function(){

return “Person[name="+this ,name+", age="+this ,age+",gender=”+this.gender”;

};

var per2 = new Person("猪八戒”,28,"男");

console.log(per2);

//打印输出“Person[name=猪八戒,age=28,gender=男]"

垃圾回收

var obj=new Object();

obj=null;   只要将不再使用的对象设置为null即可。

垃圾回收(GC)

- 就像人生活的时间长了会产生垃圾一样,程序运行过程中也会产生垃圾这些垃圾积攒过多以后,会导致程序运行的速度过慢,所以我们需要一个垃圾回收的机制,来处理程序运行过程中产生垃圾当一个对象没有任何的变量或属性对它进行引用,此时我们将永远无法操作该对象,此时这种对象就是一个垃圾,这种对象过多会占用大量的内存空间,导致程序运行变慢.所以这种垃圾必须进行清理。

在]S中拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁我们不需要也不能进行垃圾回收的操作

我们需受做的只要将不再使用的对象设置为null即可。

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

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

相关文章

106 uni-app 小程序之巨坑 not found path,not found methods v-for渲染出现报错

1.Component is not found in path 你是否像我一样,检查了无数遍,引入路径检查千万遍,就是没写错,小程序后台就是给你报错, 不用慌,心里默念:我不能砸电脑,我不能砸电脑&#xff0…

kitex出现:open conf/test/conf.yaml: no such file or directory

open conf/test/conf.yaml: no such file or directory https://github.com/cloudwego/cwgo/issues/120 https://github.com/cloudwego/cwgo/issues/29 在使用Kitex生成的代码中,单元测试时回报错,如标题所示。出现该错的原因是,biz/servic…

python 神经网络归纳

CNN卷积神经网络 一个卷积神经网络主要由以下5层组成: 数据输入层/ Input layer卷积计算层/ CONV layerReLU激励层 / ReLU layer池化层 / Pooling layer全连接层 / FC layer 1. 数据输入层 该层要做的处理主要是对原始图像数据进行预处理,其中包括&…

主流数据库体系结构

MySQL 我们通常所说的 MySQL 数据库服务器由一个实例(instance)以及一个数据库(database)组成。实例包括一组后台进程/线程和许多内存结构,用于管理数据库;数据库由一组磁盘文件组成,用于存储数…

基于FPGA的简易BPSK和QPSK

1、框图 2、顶层 3、m_generator M序列的生成,输出速率为500Kbps 4、S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据(就有4个象限); 5、my_pll是生成256M的时钟作为载波,因为sin和cos信号的…

论文阅读<MULTISCALE DOMAIN ADAPTIVE YOLO FOR CROSS-DOMAIN OBJECT DETECTION>

论文链接:https://arxiv.org/pdf/2106.01483v2.pdfhttps://arxiv.org/pdf/2106.01483v2.pdf 代码链接:GitHub - Mazin-Hnewa/MS-DAYOLO: Multiscale Domain Adaptive YOLO for Cross-Domain Object DetectionMultiscale Domain Adaptive YOLO for Cross…

Postgresql源码(118)elog/ereport报错跳转功能分析

1 日志接口 elog.c完成PG中日志的生产、记录工作,对外常用接口如下: 1.1 最常用的ereport和elog ereport(ERROR,(errcode(ERRCODE_UNDEFINED_TABLE),errmsg("relation \"%s\" does not exist",relation->relname)));elog(ERRO…

文献速递:生成对抗网络医学影像中的应用—— CG-3DSRGAN:用于从低剂量PET图像恢复图像质量的分类指导的3D生成对抗网络

文献速递:生成对抗网络医学影像中的应用—— CG-3DSRGAN:用于从低剂量PET图像恢复图像质量的分类指导的3D生成对抗网络 本周给大家分享文献的主题是生成对抗网络(Generative adversarial networks, GANs)在医学影像中的应用。文献…

JFreeChart 生成图表,并为图表标注特殊点、添加文本标识框

一、项目场景: Java使用JFreeChart库生成图片,主要场景为将具体的数据 可视化 生成曲线图等的图表。 本篇文章主要针对为数据集生成的图表添加特殊点及其标识框。具体包括两种场景:x轴为 时间戳 类型和普通 数值 类型。(y轴都为…

【ceph】pg down的处理流程

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

【AI美图】第09期效果图,AI人工智能汽车+摩托车系列图集

期待中的未来AI汽车 欢迎来到未来的世界,一个充满创新和无限可能的世界,这里有你从未见过的科技奇迹——AI汽车。 想象一下,你站在十字路口,繁忙的交通信号灯在你的视线中闪烁,汽车如潮水般涌来,但是&…

灰度化、二值化、边缘检测、轮廓检测

灰度化 定义 灰度图像是只含亮度信息,不含色彩信息的图像。灰度化处理是把彩色图像转换为灰度图像的过程,是图像处理中的基本操作。OpenCV 中彩色图像使用 BGR 格式。灰度图像中用 8bit 数字 0~255 表示灰度,如:0 表…

使用汇编和反汇编引擎写一个x86任意地址hook

最简单的Hook 刚开始学的时候,用的hook都是最基础的5字节hook,也不会使用hook框架,hook流程如下: 构建一个jmp指令跳转到你的函数(函数需定义为裸函数)保存被hook地址的至少5字节机器码,然后写入构建的jmp指令接着在…

Layui 2.9.2 列表商品展示页 用模板引擎 laytpl Ajax 读取json 数据 筛选数组 filter css 限制文体显示过长用。。。代替

全代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>软件管理器</title><meta name"renderer" content"webkit"><meta http-equiv"X-UA-Compatible" conten…

Flink系列之:Elasticsearch SQL 连接器

Flink系列之&#xff1a;Elasticsearch SQL 连接器 一、Elasticsearch SQL 连接器二、创建 Elasticsearch表三、连接器参数四、Key 处理五、动态索引六、数据类型映射 一、Elasticsearch SQL 连接器 Sink: BatchSink: Streaming Append & Upsert ModeElasticsearch 连接器…

Graylog配置日志保留策略

找了半天没找到说的清楚的&#xff0c;只能抠官方文档 graylog的归档&#xff08;日志持久化&#xff09;只有付费版才能用&#xff0c;所以日志只能存在es中 1.理解官方给出的几个概念 轮转策略 (Index Rotation Strategy): 轮转策略定义了何时创建新的索引以及何时关闭旧的索…

pytorch-模型预测概率值为负数

在进行ocr识别模型预测的时候&#xff0c;发现预测的结果是正确的&#xff0c;但是概率值是负数&#xff1a; net_out net(img) #torch.Size([70, 1, 41]) logit, preds net_out.max(2) #41是类别 需要对类别取最大值 preds preds.transpose(1, 0).contiguous().view(-1) …

Win10安装Gogs保姆级教程

什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 开发目的 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并且支持 Go 语言支持的 所有平台&#xff0c;包括 Linux、Mac OS X…

微软官方出品:GPT大模型编排工具,支持C#、Python等多个语言版本

随着ChatGPT的火热&#xff0c;基于大模型开发应用已经成为新的风口。虽然目前的大型模型已经具备相当高的智能水平&#xff0c;但它们仍然无法完全实现业务流程的自动化&#xff0c;从而达到用户的目标。 微软官方开源的Semantic Kernel的AI编排工具&#xff0c;就可以很好的…

C语言struct,union内存对齐

测试环境&#xff1a; #include<stdio.h> int main(){//1字节对齐struct XXX{unsigned char ch;unsigned int in;unsigned short si;}__attribute__((packed));struct XXX xxx;printf("%zd\n",sizeof(xxx));//7#pragma pack(1)struct YYY{unsigned char ch;u…