JavaSript函数、函数中的参数、对象

318 阅读5分钟


一、函数

函数的作用

  • 函数可以封装任意多条语句,而且在任何时候任何地方调用执行

函数的定义

  • 使用function声明,后跟一组参数以及函数体函数

函数的返回值

  • 任何函数通过return语句,后面跟着返回的值来实现返回值
  1. 函数会在执行玩return后停止并立即退出
  2. return语句也可以不带任何返回值,用于要提前停止函数执行又不需要任何返回值的情况。

二、函数的参数

ES函数中的参数和其他语言函数中的参数不一样,既不介意函数参数的个数也不介意参数的类型。在定义了两个参数的函数里,可以传递一个、两个或者三个,甚至不传递。这是因为函数传递过来的参数在内部用一个数组来表示、管理,在函数体内通过arguments对象来访问这个数组。

说明:

1、arguments对象只是与数组类似的属性,并不是Array的实例,不能使用数组的方法。

2、[ ]语法访问它的每一个元素。

3、length属性确定传递参数的个数。


arguments应用:求一组数的平均值

function getAvg( )
{  var sum=0,len=argumengs.length    
for(i=0;i<len;i++)
{         
  sum=+arguments[i]; 
}    
  return sum/len;
}
  var avg=getAvg(1,2,3,4,5,6);
  console.log(avg);


三、对象

  • 对象是什么

对象的作用:简化函数的参数列表,只用传递对象名进去,不用再把所有属性一一传递进去。

现实中的对象:

  1. 万物皆对象,一切事和物都可以是对象。
  2. 对象是一个具体的食物,手机、汽车不是对象,因为是一类食物
  3. 对象由特征和行为组成。特征是描述对象的名词,行为是描述对象的动词,对象可以做什么。

JS中的对象:

对象其实就是生活中对象的一个抽象(面向对象编程:对象可以自己创建,有些系统也会提供相应功能,不用写很多代码,很方便)

对象是无序属性的一个集合

其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JS中的对象想象成键值对,其中值可以是数据或函数。

对象的成员:

特征——属性(名词)

行为——方法(动词)

函数和对象的区别:

函数封装一段代码,通过函数名可以方便重用代码实现的某个功能;

对象封装属性和方法,方便使用对象的成员。

  • 对象的创建方法

  1. 字面量创建一个对象

如何创建对象及使用对象的成员

创建对象:

对象可以赋值给一个变量

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

  • 遍历和删除对象的属性