相信很多学习计算机编程的人,或多或少都会接触到面向对象。那么,对象究竟是什么呢?
对象:类的一个实例,包含了一系列的属性与方法。通俗易懂来说,万物皆对象,我们每一个人,都是一个对象,我们会学习,会动脑,会跑会跳,这些都是行为(也就是方法);另外,我们的身高、体重等就可以看做是属性。
面向对象中,我们经常会听到 “类” 这个字,都会想到 “类别” ,“类型” ,那么它到底是什么呢?
类:类是对现实生活中一类具有共同特征的事物的抽象。简单来说,人类就是一个类。而类中,有无数个对象。
当然,在java语言中,通常只要看到 “class”,就知道这是一个类,那么在前端中,我们该如何定义一个对象呢?
平时,我们可以以下面这种方式来创建对象:
var str = "hello,欢迎学习面向对象!";
或
var str = new String("hello,欢迎学习面向对象!");
接下来,我们要用面向对象的方法,来为创建好的对象添加一个属性:
添加完属性,我们再来一个方法:
String.prototype.weather = function(){
alert("It's rainning...");
}
str.weather(); //调用weather
学会了创建方法,我们来看一个小例子:
function Leo(name,age){ //构造函数
this.name = name; // name属性
this.age = age; // age属性
// 用面向对象的方法创建一个stu方法
Leo.prototype.stu = function(){
console.log(this.name + "今年" + this.age,this);
}
}
// 创建方法weight
Leo.prototype.weight = function(){
alert("体重正常!!!");
}
// 创建方法height
Leo.prototype.height = function(){
return "身高183cm";
}
var student = new Leo("小阳",23); //创建student对象
student.stu(); //调用stu方法
student.weight(); //调用weight方法
console.log(student.height()); //调用height方法,并在控制台输出
这个例子中,提到了一个关键字 “this”:
this的指向:
1. 在普通函数下 this指向的是 window。
2. 有事件源指向事件源本身。
改变this的指向:
1. call( )
例如: function a(){
console.log(this);
}
a.call(1);
2. apply( )
例如: function a(x,y,z){
console.log(this,x,z,y)
}
a.apply(1,[2,3,4]);
在这里,我们要区分一下call( )和apply( ):
1、调用一个对象的一个方法,用另一个对象替换当前对象。
2、传入的参数列表形式不同:
call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。
即:Leo1.call(this,name,age);
apply:最多只能有两个参数——新this对象和一个数组argArray。
即:Leo1.apply(this,[name,age]);