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-Mozilla和IE中的一个函数直接量的问题
Jan 09 Javascript
超棒的响应式布局jQuery插件Freetile.js
Nov 17 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
Mar 13 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
Sep 06 Javascript
在AngularJS框架中处理数据建模的方式解析
Mar 05 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
Express框架之connect-flash详解
May 31 Javascript
解决ztree搜索中多级菜单展示不全问题
Jul 05 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python右对齐的实例方法
2020/07/05 Python
Python 实现一个计时器
2020/07/28 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
竟聘演讲稿范文
2013/12/31 职场文书
技校个人求职信范文
2014/01/25 职场文书
精彩的广告词
2014/03/19 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
死亡证明书样本说明
2014/10/18 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
学习nginx基础知识
2021/09/04 Servers
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android
关于Redis的主从复制及哨兵问题
2022/06/16 Redis