面向对象OOP
- JavaScript中的
object
类
1、直接使用变量定义object
对象
var car = {
"wheels": 4,
"engines": 1, //注意这里使用逗号
"seats": 4 //此处没有逗号
}; //注意此处的分号,用于结束变量定义语句
2、使用构造函数来创建对象
构造函数通常采用大写字母开头,区别于普通函数。
var Car = function() {
this.wheels = 4;
this.engines = 1;
this.seats = 4; //注意这里都使用分号
}; //这里也有分号
this
指向被次构造函数创建出来的对象,this.wheels = 4;
,它创建出来的对象带有wheels
属性,并且赋值为4。
3、使用构造函数创建实例对象
使用关键字new
去调用构造函数,JavaScript根据构造函数创建一个新的实例对象(instance),并且将构造函数中的this
指针指向这个新的对象。
var myCar = new Car();
myCar
是Car
的一个实例,它被构造函数描述成:
{
"wheels": 4,
"engines": 1,
"seats": 4
};
myCar
可以像普通对象一样被使用,包括创建、访问、修改它的属性。
myCar.turboType = "twin"; //myCar增加一个"turboType"属性,其值为"twin"
myCar.engines = 2; //myCar的engines属性值被修改为2,除了点号访问,也可以使用["seats"]来访问。
4、向构造函数中增加参数,创建不同的实例对象
var Car = function(wheels, engines, seats) {
this.wheels = wheels;
this.engines = engines;
this.seats = seats;
};
var myCar = new Car(6, 2, 4); //创建一个wheels为6,engines为2,seats为4的对象
-
对象的属性和方法
对象用于自己的特征,称为属性;对象拥有自己的函数,称为方法。
构造函数中的this
指针指向当前创建的对象中的public
公有属性,同时可以创建private
私有属性和方法。私有的属性和方法在对象外部是不可访问的在构造函数中使用
var
创建变量,代替this
创建属性,var
声明的是局部变量。
var Car = function() {
// this is a private variable
var speed = 10;
// these are public methods
this.accelerate = function(change) {
speed += change;
};
this.decelerate = function() {
speed -= 5;
};
this.getSpeed = function() {
return speed;
};
};
可以记录car的speed
,外部只能对speed
进行加减(而非变成字符串、直接赋值为其他某个速度值),提供规定的街口操作speed
。
map()
方法
-
map()
方法可以方便地迭代数组中每一个元素,并且根据回调函数来处理每一个元素,最后返回一个新的数组,map()
方法不会改变原始数组。
var timesFour = oldArray.map(function(val) {
return val * 4; //function(val)函数处理数组中的每一个元素,最后返回一个新的数组
});
注:回调函数支持多个参数。
reduce()
方法
-
reduce()
方法用于迭代数组元素,并将所有元素的值累积到一个值中。使用reduce()
方法时,需要传入一个回调函数,其参数是一个累加器(类似例子中的previousVal
和当前值currentVal
)。 -
reduce()
方法有一个可选的第二个参数,可以设置累加器的初始值。如果没有定义初始值,那么数组的第一项将变为初始值,currentVal
将从数组的第二项开始。
var array = [4,5,6,7,8];
var singleVal = 0;
singleVal = array.reduce(function(previousVal, currentVal) {
return previousVal + currentVal;
});
filter()
方法
-
filter()
方法用来迭代一个数组,并按照条件过滤掉不符合要求的元素。 -
filter()
方法传入一个回调函数,回调函数携带一个参数,参数为当前项(Val
),回调函数返回true
的项会被保留在数组中;返回false
的项会被过滤出数组。
array = array.filter(function(val) {
return val !== 5;
}); //移处数组array中等于5的项。
sort()
方法
- 使用
sort()
方法可以方便地按字母或数字顺序对数组中的元素进行排序,sort()
方法会改变原数组,返回重新排序的数组。 -
sort()
方法可以把比较函数作为参数传入。比较函数有返回值,当 a 小于 b,返回一个负数;当 a大于 b ,返回一个正数;相等时返回0。 - 如果没有传入比较函数,它将把值全部转成字符串,并按照字母顺序进行排序。
//从小到大
var array = [1, 12, 21, 2];
array.sort(function(a, b) {
return a - b;
});
//从大到小
var array = [1, 12, 21, 2];
array.sort(function(a, b) {
return b - a;
});
reverse()
方法
reverse()
方法可以翻转数组。
var myArray = [1, 2, 3];
myArray.reverse(); //myArray变为[3, 2, 1],会改变原数组
concat(val)
方法
concat(val)
方法可以将两个数组的内容合并到一个数组,参数val
是一个数组,将其拼接到原数组的后面,作为一个新数组返回。
newArray = oldArray.concat(otherArray); //将数组otherArray添加到数组oldArray之后,并将返回的新数组赋值给newArray。
split()
方法
使用split()
方法按照指定分隔符将字符串分割为数组。split(val)
需要一个参数val
,val
参数将会作为一个分隔符。
var array = string.split('s'); //以及s将字符串string分割为数组。
join()
方法
使用join()
方法将数组转换成字符串,数组的每个元素根据join()
的参数连接起来。
使用and
连接:
var veggies = ["Celery", "Radish", "Carrot", "Potato"];
var salad = veggies.join(" and ");
console.log(salad); // "Celery and Radish and Carrot and Potato"