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 相关文章推荐
js动态创建、删除表格示例代码
Aug 07 Javascript
实现51Map地图接口(示例代码)
Nov 22 Javascript
JS获取随机数函数可自定义最小值最大值
May 08 Javascript
Javascript模拟加速运动与减速运动代码分享
Dec 11 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
javascript操作表格排序实例分析
May 06 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 Javascript
适用于手机端的jQuery图片滑块动画
Dec 09 Javascript
jQuery实现百度登录框的动态切换效果
Apr 21 jQuery
简述jQuery Easyui一些用法
Aug 01 jQuery
Node.js path模块,获取文件后缀名操作
Nov 07 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使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
php-fpm配置详解
2014/02/12 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
详解PHP中的PDO类
2015/07/06 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Vue自定义指令详解
2017/07/28 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
高校生生产实习自我鉴定
2013/09/21 职场文书
英文演讲稿开场白
2014/08/25 职场文书
2014年度党员自我评议
2014/09/13 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
教师个人总结范文
2015/02/11 职场文书
教师培训简讯
2015/07/20 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
社会实践心得体会范文
2016/01/14 职场文书
《正比例》教学反思
2016/02/23 职场文书
初中政治教师教学反思
2016/02/23 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技