什么是对象:
对象是一个整体,对外提供一些操作。
什么是面向对象:
使用对象时,只关注对象提供的功能,不关注其内部细节,例如jquery
面向对象是一种通用思想,并非只有编程中能用,任何事情都可以用。
javascript中得面向对象:
面向对象编程(OOP)的特点:
抽象:抓住核心问题
封装:不考虑内部实现,只考虑功能使用
继承:从已有对象上,继承出新的对象
—多重继承
—多态
对象的组成:
—方法—函数:过程、动态的
—属性—变量:状态、静态的
用工厂方式构造对象:构造函数
<script>
//用工厂方式构造对象
function createPerson(name,sex){ //构造函数
var obj = new Object();
obj.name = name;
obj.sex = sex;
obj.showName = function(){
alert('我的名字叫'+this.name);
};
obj.showSex = function(){
alert('我是'+this.sex+'的');
};
return obj;
}
var p1 = createPerson('blue','nan');
p1.showName();
p1.showSex();
</script>
工厂方式的缺点:
1、没有new
2、每个对象都有自己的函数,这是极其浪费资源的。
this:当前的方法,属于谁。
Array类:不具备实际的功能,只能用来构造对象
arr对象:真正有功能的东西,被类给构造出来
用prototype方式来解决工厂方式问题。
<script>
var arr1 = new Array(12,5,8,4);
var arr2 = new Array(44,5,6,7,8);
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());
</script>
原型的一个重要的功能(应用):可以扩展系统的对象
<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','nan');
p.showName();
p.showSex();
</script>
实例:面向对象的选项卡
把面向过程的程序,改写成面向对象的形式
原则:不能有函数套函数的情况,但可以有全局变量
所有的代码都必须在window.onload里。