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 相关文章推荐
Prototype Class对象学习
Jul 19 Javascript
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
不同浏览器的怪癖小结
Jul 11 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
Sep 06 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
详解vue挂载到dom上会发生什么
Jan 20 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
May 05 Javascript
微信小程序实现带参数的分享功能(两种方法)
May 17 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 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/01/11 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
PHP学习笔记之session
2018/05/06 PHP
php实现微信支付之企业付款
2018/05/30 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
深入解析Python编程中JSON模块的使用
2015/10/15 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Python文件的读写和异常代码示例
2017/10/31 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
python实现大转盘抽奖效果
2019/01/22 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python匿名函数的使用方法解析
2019/10/10 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
百度软件工程师职位
2013/02/14 面试题
软件设计的目标是什么
2016/12/04 面试题
机械设计职业生涯规划书
2013/12/27 职场文书
环保建议书500字
2014/05/14 职场文书
2019年工作总结范文
2019/05/21 职场文书
2019经典广告词集锦!
2019/07/02 职场文书