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 相关文章推荐
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
Mootools 1.2教程 类(一)
Sep 15 Javascript
javascript 程序库的比较(一)之DOM功能
Apr 07 Javascript
jquery 选项卡效果 新手代码
Jul 08 Javascript
jQuery简单实现banner图片切换
Jan 02 Javascript
javascript批量修改文件编码格式的方法
Jan 27 Javascript
js判断鼠标左、中、右键哪个被点击的方法
Jan 27 Javascript
JavaScript绑定事件监听函数的通用方法
May 14 Javascript
微信小程序链接传参并跳转新页面
Nov 29 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
如何用Node写页面爬虫的工具集
Oct 26 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(1)
2006/10/09 PHP
php intval的测试代码发现问题
2008/07/27 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
Vue实现多页签组件
2021/01/14 Vue.js
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python人民币小写转大写辅助工具
2018/06/20 Python
windows下python安装小白入门教程
2018/09/18 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python爬虫用mongodb的理由
2020/07/28 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
局域网定义和特性
2016/01/23 面试题
个人工作表现评价材料
2014/09/21 职场文书
教师岗位职责范本
2015/04/02 职场文书