JavaScript对象字面量和构造函数原理与用法详解


Posted in Javascript onApril 18, 2020

本文实例讲述了JavaScript对象字面量和构造函数。分享给大家供大家参考,具体如下:

对象中只有两种属性:(一种比较细的分法)

属性(数据属性)比如:名字,年龄,性别,出版社,地址等信息;
方法(封装代码的属性:函数 ,在这也是一种属性)。

在JS中对象的字面量和构造函数是非常的重点,其实在其他的语言中,是没有对象字面量的。

一.对象的字面量的语法:

{
属性名: 属性值,
属性名: 属性值,
方法名: 你们函数
}

这个大括号括起来的整个代码块就是叫做对象。

var p1 = { }

①访问对象的属性:

  1. . 语法

        对象.属性

  2. [ ] 语法

    对象["属性名"]

    对象[变量]     通过外面var一个变量,这个变量类型是字符串,然后在[]中直接使用变量名。

②修改属性的值:(当这个属性名在对象字面量中是存在的,那就是修改其值)
②修改属性的值:(当这个属性名在对象字面量中是存在的,那就是修改其值)
③新增属性的值:(当这个属性名在对象字面量中是没有的,那就是新增其属性名和属性值)

修改和新增都是一下语法:

对象.属性名 = 值

④删除对象的属性:

delete 对象.属性

二.使用构造函数来创建对象:

function Person(name, sex){
    var a = 10;
    this.name = name;
    this.sex = sex;
    this.speak = function(){

          }
    }

现在我们new一下:

var p1 = new Person ;

那么我们就叫p1是一个对象,一new出来就会在堆内存中分配一块内存空间。

那么p1的类型就是Person.

那么如果我们用 p1 instanceof Person 检测会返回true,那么 instanceof 就是测试对象类型。

在代码块中,var a = 10 ; 这个语句是一个变量,变量是放在 栈内存 ,但当他执行完一遍这个构造函数时,这个a就消失了,也就是说这个局部变量的生命周期是new出来到执行完构造函数最后一句的就消失了。

但是 里面的属性,name sex speak 这些属性上只要p1在他们就在。

那么现在我们再次体会一下局部变量a的生命周期和内存模型中的理解:

<script>
  function Person(name, sex) {
    var a = 10;
    this.name = name;
    this.sex = sex;
    this.outputa = function () {
      console.log(a);
    }
    this.speak = function () {

    }
  }

  var p1 = new Person();
  console.log(p1.a);
  p1.outputa();
</script>

结果是:

JavaScript对象字面量和构造函数原理与用法详解

首先,var p1 = new Person();,new一下出来一个p1对象,计算机就会在堆内存(heap memory)中为P1选中一块内存。

然后,console.log(p1.a);,这句语句执行,这句可以这么理解①:你a在全局变量中并没有,只在构造函数中的局部变量中才有,在构造函数中的局部变量var a = 10;他会声明提前,但是他只是提前到函数的第一行执行。这也就可以说明局部变量,我们不能在外部使用。理解②就是函数作用域中的变量他是局部变量,在栈内存分配内存后,当函数执行到最后一行时,他就结束生命周期。

这个undefined是JS的一种安全机制,如果对象点一个没有生命的变量,那么就会默认成undefined,但如果是普通的变量,就会报错。报错信息是这个变量未被定义。

详见:JavaScript内存模型详解。

*注意:对象字面量的用法用

​ 构造函数的用法用 =

那么类型和对象之间的关系是什么呢?

也就是比如p1和Person的关系是什么呢?见下表:

类型 对象
抽象 具体
其他语言中类的作用
在JS中是构造函数的形式(构造函数=类)
命名用大坨法(首字母大写)

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
JavaScript 滚轮事件使用说明
Mar 07 Javascript
理解Javascript_06_理解对象的创建过程
Oct 15 Javascript
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
javascript字母大小写转换的4个函数详解
May 09 Javascript
简介JavaScript中的italics()方法的使用
Jun 08 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
分享10个优化代码的CSS和JavaScript工具
May 11 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
Vue.js鼠标悬浮更换图片功能
May 17 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
vant自定义二级菜单操作
Nov 02 Javascript
javascript 内存模型实例详解
Apr 18 #Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 #Javascript
javascript使用Blob对象实现的下载文件操作示例
Apr 18 #Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 #Javascript
es6函数name属性功能与用法实例分析
Apr 18 #Javascript
es6数组includes()用法实例分析
Apr 18 #Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 #Javascript
You might like
PHP时间戳使用实例代码
2008/06/07 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python中的列表知识点汇总
2015/04/14 Python
Python定时器实例代码
2017/11/01 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
详解python 爬取12306验证码
2019/05/10 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
英国工具中心:UK Tool Centre
2017/07/10 全球购物
幼儿园教师培训制度
2014/01/16 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
盗窃案辩护词
2015/05/21 职场文书
小数乘法教学反思
2016/02/22 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技