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 相关文章推荐
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
js跨域访问示例(客户端/服务端)
May 19 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
JavaScript表单验证完美代码
Mar 02 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
vue仿ios列表左划删除
Sep 26 Javascript
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
jQuery实现颜色打字机的完整代码
Mar 19 jQuery
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
Jul 15 Javascript
JavaScript获取URL参数的方法分享
Apr 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
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
创建Django项目图文实例详解
2019/06/06 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
pip安装python库的方法总结
2019/08/02 Python
pygame实现弹球游戏
2020/04/14 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
单位提档介绍信
2014/01/17 职场文书
护士检查书
2014/01/17 职场文书
先进工作者个人总结
2015/02/15 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
python3.9之你应该知道的新特性详解
2021/04/29 Python
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
Python破解极验滑动验证码详细步骤
2021/05/21 Python
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技