面向对象基础(二)
- new 与 this 的关系
<script>
//用工厂方式构造对象
function createPerson(name, sex) //构造函数
{
//假想的系统内部工作流程
//var this=new Object();
this.name=name;
this.sex=sex;
this.showName=function ()
{
alert('我的名字叫:'+this.name);
};
this.showSex=function ()
{
alert('我是'+this.sex+'的');
};
//假想的系统内部工作流程
//return this;
}
var p1=new createPerson('blue', '男');
var p2=new createPerson('leo', '女');
/*p1.showName();
p1.showSex();
p2.showName();
p2.showSex();*/
alert(p1.showName==p2.showName);
</script>
- 给数组添加求和方法
<script>
var arr1=new Array(12, 5, 8, 4);
var arr2=new Array(44,6,5,4,5,55,9);
//arr1.sum=function ()
Array.prototype.sum=function ()
{
var result=0;
var i=0;
for(i=0;i<this.length;i++)
{
result+=this[i];
}
return result;
};
/*alert(arr1.sum());
alert(arr2.sum());*/
alert(arr1.sum==arr2.sum);
</script>
- prototype 与 CSS 的关联
css行内样式,等同于函数方法,给一个对象添加方法
class类选择器,等同于prototype,给一类元素添加方法
prototype 扩展系统对象的方法,数组,字符串添加方法
原型添加的方法,不会浪费资源,
- 类与对象(实例)的区别
类 类似于蛋糕模子
对象(实例) 产品类似于对象 - 构造函数与类的关联
- 混合法创建构造函数
<script>
function Person(name, sex)
{
this.name=name;
this.sex=sex;
}
Person.prototype.showName=function ()
{
alert(this.name);
};
Person.prototype.showSex=function ()
{
alert(this.sex);
};
var p=new Person('blue', '男');
p.showName();
p.showSex();
</script>
- 原型优先级问题、delete 运算符
<script>
Array.prototype.a=12;
var arr=[1,2,3];
alert(arr.a); //12
arr.a=5;
alert(arr.a); //5
delete arr.a;
alert(arr.a); //12
</script>
- 面向对象回顾