一、函数
函数的作用
函数可以封装任意多条语句,而且在任何时候任何地方调用执行
函数的定义
使用function声明,后跟一组参数以及函数体函数
函数的返回值
任何函数通过return语句,后面跟着返回的值来实现返回值函数会在执行玩return后停止并立即退出
return语句也可以不带任何返回值,用于要提前停止函数执行又不需要任何返回值的情况。
二、函数的参数
ES函数中的参数和其他语言函数中的参数不一样,既不介意函数参数的个数也不介意参数的类型。在定义了两个参数的函数里,可以传递一个、两个或者三个,甚至不传递。这是因为函数传递过来的参数在内部用一个数组来表示、管理,在函数体内通过arguments对象来访问这个数组。
说明:
1、arguments对象只是与数组类似的属性,并不是Array的实例,不能使用数组的方法。
2、[ ]语法访问它的每一个元素。
3、length属性确定传递参数的个数。
arguments应用:求一组数的平均值
function getAvg( )
{ var sum=0,len=argumengs.length
for(i=0;i
{
sum=+arguments[i];
}
return sum/len;
}
var avg=getAvg(1,2,3,4,5,6);
console.log(avg);复制代码
三、对象
对象是什么
对象的作用:简化函数的参数列表,只用传递对象名进去,不用再把所有属性一一传递进去。
现实中的对象:万物皆对象,一切事和物都可以是对象。
对象是一个具体的食物,手机、汽车不是对象,因为是一类食物
对象由特征和行为组成。特征是描述对象的名词,行为是描述对象的动词,对象可以做什么。
JS中的对象:
对象其实就是生活中对象的一个抽象(面向对象编程:对象可以自己创建,有些系统也会提供相应功能,不用写很多代码,很方便)
对象是无序属性的一个集合
其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JS中的对象想象成键值对,其中值可以是数据或函数。
对象的成员:
特征——属性(名词)
行为——方法(动词)
函数和对象的区别:
函数封装一段代码,通过函数名可以方便重用代码实现的某个功能;
对象封装属性和方法,方便使用对象的成员。
对象的创建方法
字面量创建一个对象
如何创建对象及使用对象的成员
创建对象:
对象可以赋值给一个变量
var dog = {
// 键值对形式,通过键(属性)访问值
name: 'puppy',
type: '中华田园犬',
age: 2,
color: 'yellow',
bask: function(){
console.log(this.name+'旺旺') // this表示当前对象dog,在方法里访问属性,名字是puppy的狗在叫
}
eat: function(){
console.log(this.name+'啃骨头') // 对象的使用和变量是不同的,对象要加this,变量直接使用变量名
}
}复制代码
访问对象里的属性和方法
对象.属性名
console.log(dog.name);复制代码
对象.方法名
dog.bark();
dog.bark();
dog.eat();复制代码
属性的另一种访问方式
console.log(dog['name']);复制代码
函数和方法的区别
函数是 独立存在的 调用:fn( );
方法是 属于对象的 调用:dog.bark( );
2.动态创建一个对象
除了上面的方法,还可以先创建一个空对象,通过 var dog = new Object( ); // 调用构造函数 会在内存中创建一个空对象
再动态创建对象的属性,随时创建成员:
dog.name = 'puppy';
dog.type = '中华田园犬';
dog.attack = function ( ) {
console.log(this.name + '旺旺');
}
复制代码
3.工厂方法创建多个对象
创建多个对象,对象里有很多相同属性,通过工厂方法:
function creatHero(name,weapon,equipment,blood){
var hero = new Object();
//属性
hero.name = name;
hero.weapon = weapon;
hero.eqiupment = eqiupment;
hero.blood = blood;
//方法
hero.attack = function() {
console.log(this.name + ':攻击');
}
hero.run = function() {
console.log(this.name + ':加速跑');
}
return hero;
}复制代码
使用工厂方法创建多个英雄,就是重用创建对象的方法传递参数一次创建多个对象:
var hero1 = creatHero('黄忠','弓箭',['头盔','靴子'],100);
var hero2 = creatHero('刘备','剑',['头盔','盔甲'],100);复制代码
4.自定义构造函数创建多个对象(语义化,与普通函数区分,最简洁)
构造函数使用帕斯卡命名规范,第一个字母大写。
function Hero(name,weapon,equipment,blood){
//this 动态的给对象增加成员
this.name = name;
this.weapon = weapon;
this.eqiupment = eqiupment;
this.blood = blood;
//this 指向当前对象
this.attack = function() {
console.log(this.name + ':攻击');
}
this.run = function() {
console.log(this.name + ':加速跑');
}
}复制代码
使用
var hero1 = new Hero('黄忠','弓箭',['头盔','靴子'],100);
var hero2 = new Hero('刘备','剑',['头盔','盔甲'],100);复制代码
new关键字的执行过程
new 一定要在后面调用构造函数,new做的四件事情
1、在内存中创建一个空的对象
2、让构造函数中的this指向刚刚创建的对象
3、执行构造函数,在构造函数中设置属性和方法或其他事情
4、返回了当前对象(构造函数里不用写return,内部会自动返回到变量里)
this
this出现在
1、方法:
this指向方法所属的对象
2、构造函数中:
this指向构造函数创建的对象
3、函数中(包括构造函数的普通调用 Fn( ) ):
this指向window
遍历和删除对象的属性