Js面向(基于)对象编程介绍
以类(原型对象)为模板创建对象
//张老太养猫的问题
//传统方法比较麻烦
var cat1_name="小白";
var cat1_age=3;
var cat1_color="白色";
//解决办法:把猫的属性集中,创建一种新的数据类(原型对象/类)。用面向对象的办法来解决上面的问题。
//这里就是一个cat类
function Cat(){
}
//如果你这样用
//Cat();//函数
var cat1=new Cat();//类
//这时cat1就是一个对象(实例)
cat1.name="小白";
cat1.age=3;
cat1.color="白色";
//从上面的代码我们可以看出
//1.js中的对象的属性可以动态的添加。
//2.属性没有限制。
window.alert(cat1.name+cat1.age+cat1.color+cat1.hobby);//没有定义的对象会弹出undefined
精简如下:
创建对象的方式有五种:
使用构造函数来定义类(原型对象)
举例:
//在js中一切都是对象
function Person(){}
window.alert(Person.constructor);//类也是对象,是以function创造出来的对象
var a=new Person();
window.alert(a.constructor);//a对象实例的构造函数
window.alert(typeof a);//a的类型是什么
var b=123;
window.alert(b.constructor);
window.alert(typeof b);
var c="123";
window.alert(c.constructor);
window.alert(typeof c);
如何判断一个对象实例是不是Person类型?
if (a instanceof Person){
window.alert("a是person ok1");
}
if(a.constructor==Person){
window.alert("a是person ok2");
}
//访问对象属性的两种方式
function Person(){}
var p1=new Person;
p1.name="顺平";
alert(p1.name);
alert(p1["name"]);
var val="na"+"me";
alert(p1[val]);
运行结果:10名字小白名字小白
运行原理图:
js垃圾回收机制:
内存由js引擎管理,js引擎是浏览器的一部分
引用次数为0 内容清零 垃圾回收
对象引用问题的说明-----图
① Js被动释放对象内存:
被动体现就算引用次数为0 ,在也不知道什么时候会回收,可能是内存不够用的时候
//js中释放内存①----被动
function Person(){}
var a=new Person();
a.age=10;
a.name="小明";
var b=a;
b.name="小白";
window.alert(b.age+"名字"+b.name+"名字"+a.name);
//至此引用了两次堆里面的内容
b=null;
window.alert(a.age+"名字"+a.name);
window.alert("b.age="+b.age);
//此时引用一次
a=null;
② js还提供一种方式,主动释放对象内存: delete
js中释放内存②----主动 delete
function Person(){};
var a=new Person();
a.age=10;
a.name="小明";
var b=a;
b.name="小白";
window.alert(b.age+"1名字"+b.name);
delete a.age;//删除a对象的属性(不能删对象,只能删属性)
//a和b 是指向同一个地方,所以b.age也会被删掉。
window.alert(b.age+"2名字"+b.name);
运行结果: 小明 200