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实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
javascript中的几个运算符
Jun 29 Javascript
用JavaScript修改CSS属性的代码
May 06 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
小程序实现抽奖动画
Apr 16 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
Vue中computed及watch区别实例解析
Aug 01 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学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python采集博客中上传的QQ截图文件
2014/07/18 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
Python循环实现n的全排列功能
2019/09/16 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
python中time包实例详解
2021/02/02 Python
Yahoo-PHP面试题3
2012/01/14 面试题
函授教育个人学习的自我评价
2013/12/31 职场文书
中学生寄语大全
2014/04/03 职场文书
班风学风建设方案
2014/05/06 职场文书
小学生环保倡议书
2014/05/15 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技