JS面向对象
使用面向对象时,只关注对象提供的功能,不关注其内部细节
面向对象编程的特点:抽象、封装(不考虑内部实现 ,只考虑功能使用)、继承(从已有对象上,继承出新的对象)
对象的组成:
方法-----函数:过程、动态的
属性-----变量:状态、静态的
为对象添加方法和属性
this详解,事件处理中this的本质
window
this----函数属于谁
不能在系统对象中随意附加方法、属性,否则会覆盖已有方法、属性,所以引入object对象
object对象
任何函数前面都能加new,函数里面的this指向对象,不再指向window
调用函数前面如果加new,偷偷创建对象,偷偷返回
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
</body>
</html>
<script>
//类:模型(不具备实际功能),对象:产品
var arr1=new Array(12,34,1,1);
var arr2=new Array(12,1,1,1);
Array.prototype.sum=function() //原型是给类加东西,class
//arr1.sum=function() //给对象加东西,行间样式
{
var result=0;
for(var i=0;i<this.length;i++)
{
result+=this[i];
}
return result;
};
alert(arr1.sum());
alert(arr2.sum());
</script>
<script>
function createPerson(name,qq) <!--构造函数只需要写属性和方法,调用时先new一个对象,再调用该对象的方法-->
{
this.name=name;
this.qq=qq;
this.showName=function()
{
alert('我的名字是:'+this.name);
}
this.showQQ=function()
{
alert('我的QQ号是:'+this.qq);
}
}
var obj=new createPerson('张三','1567815');
//obj.showName();
//obj.showQQ();
</script>
<script>
<!--混合的构造函数/原型方式-->
function CreatePerson(name,qq) //用构造函数加属性
{
this.name=name;
this.qq=qq;
}
CreatePerson.prototype.showName=function() //用原型加方法
{
alert('我的名字是:'+this.name);
}
CreatePerson.prototype.showQQ=function()
{
alert('我的QQ号是:'+this.qq);
}
var obj=new CreatePerson('张三','1567815');
obj.showName();
obj.showQQ();
</script>