js面向对象
一、什么是对象
对象可以看成一个属性的集合。对像一般有属性和方法构成,方法的实质是函数,而属性的实质是变量。
二、什么是面向对象
面向对象可以理解为不需要去了解对像的内部结构,就可以使用它。像我们的date 对像的方法可以获取和设置时间,但我们并不了解其内部原理。
三、面向对象(抽风机)
抽象:抽取核心信息
封装:不考虑内部实现,重点会使用就行。
继承:继承父类的功能,还能有自己的功能。
四、创建对象的方法(本质上都是把“属性”和“方法”,封装成一个对象)
1、基本模式:
<script>
var obj=new Object();
obj.name='blue';
obj.qq='258248832';
obj.showName=function ()
{
alert('我的名字叫:'+this.name);
};
obj.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
obj.showName();
obj.showQQ();
var obj2=new Object();
obj2.name='张三';
obj2.qq='5468978546';
obj2.showName=function ()
{
alert('我的名字叫:'+this.name);
};
obj2.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
obj2.showName();
obj2.showQQ();
</script>
2、工厂模式(原料、加工、出厂)
<script>
function createPerson(name, qq) //构造函数
{
//原料
var obj=new Object();
//加工
obj.name=name;
obj.qq=qq;
obj.showName=function ()
{
alert('我的名字叫:'+this.name);
};
obj.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
//出厂
return obj;
}
var obj=createPerson('blue', '258248832');
obj.showName();
obj.showQQ();
var obj2=createPerson('张三', '45648979879');
obj2.showName();
obj2.showQQ();
</script>
*this指的是谁用这个函数,就是指谁。
*工厂方式的缺点a:没使用new.b:函数的使用重复造成系统资源的浪费。
加上new:
<script>
function createPerson(name, qq) //构造函数
{
//系统偷偷替咱们做:
//var this=new Object();
//加工
this.name=name;
this.qq=qq;
this.showName=function ()
{
alert('我的名字叫:'+this.name);
};
this.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
//也会偷偷做一些:
//return this;
}
var obj=new createPerson('blue', '258248832');
var obj2=new createPerson('张三', '45648979879');
obj.showName();
obj.showQQ();
//alert(obj.showName==obj2.showName);
</script>
3、原型模式——prototype
<script>
function createPerson(name, qq) //构造函数
{
//系统偷偷替咱们做:
//var this=new Object();
//加工
this.name=name;
this.qq=qq;
//也会偷偷做一些:
//return this;
}
createPerson.prototype.showName=function () //原型
{
alert('我的名字叫:'+this.name);
};
createPerson.prototype.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
var obj=new createPerson('blue', '258248832');
var obj2=new createPerson('张三', '45648979879');
/*obj.showName();
obj.showQQ();
obj2.showName();
obj2.showQQ();*/
alert(obj.showName==obj2.showName);
</script>