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 相关文章推荐
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
JS中的eval 为什么加括号
Apr 13 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
May 10 Javascript
js获取客户端操作系统类型的方法【测试可用】
May 27 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
微信小程序收藏功能的实现代码
Jun 12 Javascript
Angular6 正则表达式允许输入部分中文字符
Sep 10 Javascript
在angularJs中进行数据遍历的2种方法
Oct 08 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php学习笔记之基础知识
2014/11/08 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
js中parseInt函数浅谈
2013/07/31 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
vue写一个组件
2018/04/09 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python tkinter组件摆放方式详解
2019/09/16 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
Python解析多帧dicom数据详解
2020/01/13 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
英国团购网站:Groupon英国
2017/11/28 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
护理专业自我鉴定
2014/01/30 职场文书
运动会邀请函范文
2014/02/06 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
地道战观后感300字
2015/06/04 职场文书
婚育证明样本
2015/06/16 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS