js是一种支持面向对象编程的脚本语句,
它有继承,封装,多态的特点
基于对象编程和面向对象编程叫法区分
js 中我们可以认为这个叫法一致
基于对象= =面向对象 类==原型对象
面向对象编程的引入
一个问题?
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。
还有一只叫小花,今年10岁,花色。请编写一个程序,
当用户输入小猫的名字时,就显示该猫的名字,年龄,
颜色。如果用户输入的小猫名错误,则显示 张老太没
有这只猫猫。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript">
//定义了一个猫类
function Cat(){ }
//创建一只猫 [js对象的属性可以动态增加]
var cat1=new Cat(); //cat1就是一个对象实例
cat1.name="小白"; //
cat1.age=3;
cat1.color="白色"
document.write(cat1.name+"--"+cat1.age+"--"+cat1.color);
//特别说明
// var cat1=new Cat(); //当做类(原型对象使用)
// Cat();
//当做函数
</script>
</html>
对象公开属性的访问方式有
对象名.属性名;
对象名[’属性名’];
js中自定义类(原型对象)的五种方法
工厂方法
var obj=new Object();
obj.属性=”aa”;
obj.show=function (){ };
通过构造函数来定义类(最多)
function 类名/函数名(){ }
var p=new 类名/函数名(); //
函数名();
通过prototype 来定义
动态的添加方法和属性.
1. 构造函数 和 prototype混合
2. 动态创建对象模式
js中一起都是对象
基本对象/系统内置对象(Number,String,Boolean..)
var i=0;
window.alert(i.constructor);
function Person(){ }
var p1=new Person();
window.alert(p1.constructor);
window.alert(Person.constructor);
window.alert(Function.constructor);
可用通过 instanceof 来 判断某个对象实例是不是某个类的对象实例, 案例:
//如何判断一个对象实例是不是某个 类(原型对象)
if(p1 instanceof Dog)
{ window.alert("p1是Person一个对象实例"); }
else
{ window.alert("p1是Dog一个对象实例"); }
js的对象在内存中是怎样存在?
var a=new Person();
a.age=10;
a.name=“小明”;
var b=a;
js的对象回收机制!!!
在js中维护一张对象对用表:
GC 如何去判断某个对象是垃圾对象.
当对象的地址被引用的次数,变成0, 则gc 就会认为该对象是垃圾,就会回收.
js中还提供了一种主动销毁对象属性的方法
基本语法是
delete 对象名.属性名; // 不要这样 delete 对象;
原理可以主动的销毁某个对象的属性 this
提出问题?
我们在编程中,可能需要当我们创建一个对象后,这个对象就自动的有某些属性,怎么?
可以这样做:
function Person()
{ //下面这句话表示,每创建一个Person实例,实例就会自动有一个属性
//name,并且是公开
this.name="小童"; }
如果你希望name是创建对象实例的时候指定,可以通过参数传入:
function Person(name)
{ //下面这句话表示,每创建一个Person实例,实例就会自动有一个属性
//name,并且是公开
this.name=name; }
使用的时候:
$p4=new Person(“顺平”);
$p4.name;
深入认识this的含义
//下面的代码讲解私有属性的怎样访问
function Person()
{ var name="abc"; //私有的,只能在内部使用
var age=900; //私有的,只能在内部使用
//感受(相当于你是通过内部函数来访问私有的变量.)
//如何理解: 说有一个属性 show 因为前面有this
//说明 show属性是公开. 该属性是指向一个函数地址属性.
//则通过 show去调用该函数.
this.show=function()
{ window.alert(name+" "+age); }
}
var p1=new Person();
//window.alert(p1.name+" "+p1.age);//错误
p1.show();
对this的再认识:
<html> <head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript">
//****案例如下****
function test1()
{ alert(this.v); }
var v=190;
test1(); //输出什么 <==> window.test1();
window.test1();
</script> </html>
this 只能在类定义的内部使用:
//说明this 只能在 类定义的内部使用
function Dog()
{ this.name="小明"; }
var dog1=new Dog();
window.alert(this.name);
//报空, 因为这样使用,相当于去访问window对象的name属性,但是你没有写.
☞ 补充讲解一个 var 的知识点:(还有说..)
//表示全局变量
var t=90;
function test(){ t=890; }
test(); window.alert(t);
说明: var 变量: 表示该变量是全局的, 如果你其他函数中,使用变量是,
前面没有带 var , 则表示要使用全局变量. 如果你在函数中 使用变量时候,
带了 var 则说明你要使用全新的变量.