韩顺平 javascript教学视频_学习笔记13_类和对象细节_创建对象的几种方式_js对象内存分析
2016-01-25 21:40
846 查看
对象——function特别说明
在js中一切都是对象类(原型对象)其实也是对象,它实际上是Function类的一个实例,通过类我们可以创建自己的对象实例,可以通过下面的代码来说明
function Person(){ } var a=new Person(); window.alert(Person.constructor);
对象实例——如何创建对象实例
var 对象名=new 类名/原型对象名();
对象实例——如何访问(使用)对象实例的成员变量
对象实例名.属性名;对象实例名["属性名"];
对象实例名["变量名"]的方式可以实现动态的访问变量,如:
function Person(){ } var p1=new Person(); p1.name="顺平"; window.alert(pa['name']+" "+p1.name);
补充说明:带var和不带var的区别
看代码:<html> <head> <script language="javascript"> //全局变量 var abc=89; function test(){ //在函数里,如果你不带 var,则表示使用全局的 abc 变量 //如果你带上var,则表示重新定义一个新的 abc 变量 //可以这么理解, //在函数内部,加 var 表示定义一个局部变量,不加 var 表示使用外部的全局变量 abc=900; } test(); window.alert(abc); //输出900 var abc2=89; function test2(){ var abc2=900; } test2(); window.alert(abc2); //输出89 </script> </head> <body></body> </html>
动态访问变量的意义:可以当作串来拼接访问
具体看如下代码
<html> <head> <script language="javascript"> function Person(){ } var p1=new Person(); p1.name="顺平"; //拼接字符串,动态访问 var val="na"+"me"; window.alert(p1[val] + p1.name); </script> </head> <body></body> </html>
加深一下理解
为了让大家加深印象,我们定义一个人类(Person)(包括名字,年龄)看下面的一段代码
<html> <head> <script language="javascript"> function Person(){ } var a=new Person(); a.age=10; a.name="小明"; var b=a; b.name="小白"; window.alert(b.age+"名字 "+b.name+" 名字"+a.name); </script> </head> <body></body> </html>
从上面代码中可以知道,js对象的传递也是引用传递
var a=new Person(); // new Person()是一个真正的数据,a是指向它的一个引用
深入理解:
什么时候才会把堆里的内容回收了呢对象回收机制(GC),垃圾回收(GC)是怎样确定堆里的内容是垃圾的呢,内存被js引擎管理,js引擎是浏览器的一部分,js引擎维护了一张表
垃圾回收机制是一种被动的回收方式,GC什么时候来调用,我们是不知道的,反正不是时时刻刻在调用的
在js中还有一种主动的删除方式,主动释放内存:delete
delete 只能删除掉某个对象的属性,不能直接删除某个对象
如下:
delete a.age; //直接把age属性删掉了,即使b没有置空,b.age也访问不到了。 delete a; //这句话是不对的
delete直接删除掉某个对象的属性
delete 对象名.属性 //这样就会立即释放对象的这个属性空间
再来看一个代码:
var a=new person(); a.age=10; a.name="小明"; var b=a; document.write(b.name); // 输出小明 b.age=200; document.write(a.age); // 输出200
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- 数组方法汇总