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 文本框得失焦点的简单实例
Feb 19 Javascript
jquery实现简单的遮罩层
Jan 08 Javascript
对javascript继承的理解
Oct 11 Javascript
原生js和css实现图片轮播效果
Feb 07 Javascript
jQuery简单实现MD5加密的方法
Mar 03 Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
vue动态绑定class选中当前列表变色的方法示例
Dec 19 Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
ES6顶层对象、global对象实例分析
Jun 14 Javascript
JavaScript键盘事件响应顺序详解
Sep 30 Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 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程序实现支持页面后退的两种方法
2008/06/30 PHP
php 动态执行带有参数的类方法
2009/04/10 PHP
第五章 php数组操作
2011/12/30 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
大学生专科学习生活的自我评价
2013/12/07 职场文书
基层党员对照检查材料
2014/09/24 职场文书
消夏晚会主持词
2015/06/30 职场文书
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server