1.澄清概念
js中基于对象==js面向对象
js中没有类class,但是它取了一个新的名字叫原型对象,因此类==原型对象
2.为什么需要对象
问题提出:张老太养了两只猫,试编写程序当用户输入小猫名字时,对应显示猫的名字、年龄、颜色。
var cat1_name="小白";
var cat1_age=3;
var cat1_color="白色";
//以上传统方法比较麻烦
//解决方法,在猫的属性集中创建一种新的数据类(原型对象/类),用面向对象的方法来解决上面的问题
//这里就是一个Cat类
function Cat(){
}
//调用时注意
//Cat(); //函数
var cat1=new Cat();//类,这时cat1就是一个对象(实例)
cat.name="小白";
cat1.age=3;
cat1.color="白色";
//打印出来
window.alert(cat1.name+cat1.age+cat1.color);
从上面代码中我们可以看出:
(1)js中的对象的属性可以动态的添加。
(2)属性没有限制。
3.类(原型对象)和对象的区别和联系
(1)类是抽象的,概念的,代表一类事物,比如人,猫…
(2)对象是具体的,实际的,代表一个具体事物。
(3)类是对象实例的模板,对象实例是类的一个个体。
4.创建对象的方式有五种
(1)工厂方法-使用new object创建对象并添加相关属性;
(2)使用构造函数来定义类(原型对象);
(3)使用prototype;
(4)构造函数及原型混合方式;
(5)动态原型方式;
先使用构造函数来定义类,然后再创建对象实例:
基本语法:
function 类名/原型对象名(){
}
创建对象:
var 对象名=new类名();
5.现在对对象特别说明:
(1)js中一切都是对象
function Person(){}
var a=new Person();
window.alert(a.constructor); //a对象实例的构造函数是function Person(){}
window.alert(typeof a); //a的类型是什么
var b=123;
window.alert(b.constructor); //a对象实例的构造函数是function Number(){}
window.alert(typeof b); //a的类型是什么
(2)类(原型对象)其实也是对象,它实际上是Function类的一个实例,通过类我们可以创建自己的对象实例,可以通过下面代码说明。
function Person(){}
var a=new Person();
window.alert(Person.constructor);//Person对象的构造函数是function Function(){}
6.如何判断一个对象实例是不是Person类型?
if(a instanceof Person){
window.alert("a是person");
}
或
if(a.constructor==Person){
window.alert("a是person");
}
7.补充说明(带var和不带var的区别)
//全局变量
var abc=89;
function test(){
//在函数里不带var则表示使用全局的abc变量
//如果带上var则表示在test()中,定义一个新的abc变量
abc=900;//var abc=900;
}
test();
window.alert(abc);
8.访问对象的属性的方法有两种:
(1)普通方式:对象名.属性名
(2)动态访问:对象名[“属性名”]
9.对象引用问题说明(对象回收机制)
js还提供一种方式主动释放对象内存:
delete 对象名.属性名 //这样就会立即释放对象的属性空间