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 相关文章推荐
javascript 操作select下拉列表框的一点小经验
Mar 20 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
javascript实现任务栏消息提示的简单实例
May 31 Javascript
js精准的倒计时函数分享
Jun 29 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
May 03 Javascript
JSON字符串操作移除空串更改key/value的介绍
Jan 05 Javascript
js生成1到100的随机数最简单的实现方法
Feb 07 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 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的可变变量名需要的注意的问题
2013/06/20 PHP
PHP xpath()函数讲解
2019/02/11 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
pyside写ui界面入门示例
2014/01/22 Python
django初始化数据库的实例
2018/05/27 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
中医药大学市场营销专业自荐信
2013/09/29 职场文书
大学生应聘推荐信范文
2013/11/19 职场文书
人事专员职责
2014/02/22 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
总经理任命书
2014/03/29 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript