JS基础语法(五)对象

对象

什么是对象

现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征

例如:一部车、一个手机

车是一类事物,门口停的那辆车才是对象。那么车的特征有:红色、四个轮子;行为有:驾驶、刹车

 JavaScript中的对象

  • JavaScript中的对象其实就是生活中对象的一个抽象
  • JavaScript中的对象在属性方面是无序的集合,其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值,我们可以把JavaScript中的对象想象成键值对,其中值可以是数据和函数
  • 对象都具有行为和特征
  • 特征------名词,用来描述这个对象的,可以看作是属性,如person的name属性(特征)
  • 行为------动词,可以看作是方法

为什么要有对象? 

因为对象可以抽象化一类的事物,方便使用,简化代码

function printPerson(name, age, sex, salary){

}    //没有对象时这样来书写很繁琐及其不方便

//有对象后,我们可以通过调用即可解决

function printPerson(person){
    console.log(person.name);
}

程序中的对象 

var student = {
    name: 'Eillen',
    age: '17',            //对象是用花括号括起来的,里面是属性和值,即键值对模式,还可以包含方法
    sex: '女',
    sayHi: function(){
        console.log('Hello');
    }

}

函数和对象有什么区别?

  • 函数----可以封装一段代码
  • 对象-----可以封装一组属性和方法

函数和方法有什么区别?

  • 函数----独立存在的函数。  函数的调用   fn();
  • 方法-----属于对象的函数。方法的调用   dog.bar( ) ;

如何创建对象和使用对象成员

对象:拥有属性和方法,这些属性和方法也叫成员

如创建狗对象:  属性有name、type、age、color        方法有:bark(叫)、eat

var dog = {
    name: '大黄',
    type: '二哈',
    age: 2,
    color: 'yellow',

    bark: function () {
        //在方法中如何使用属性的值
        console.log(this.name + '汪汪汪');    //this在方法中代表的是当前对象dog
    },    
    eat: function () {
        console.log(this.name + '啃骨头');
    }

}
 
//如何访问属性    对象.属性名
console.log(dog.name);
//如何访问方法    对象.方法名
dog.bark();
  • 如何访问属性 

一种方法为:     对象.属性名            另一种方法为:    dog [ 'name' ]; (类似数组,只是中括号里面要用单引号把属性括起来)

  • 如何访问方法   对象.方法名

对象的创建方式

对象字面量创建

var hero = {
    name: '黄忠',
    weapon:'弓箭',
    equipment: ['头盔', '靴子', '盔甲'],
    blood: 100,
    attack: function () {
        console.log(this.name + '射箭');
    },
    run: function () {
        console.log(this.name + '加速跑');
    }
}
console.log(hero.name);
console.log(hero.equipment);

hero.attack();
hero.run();

new Object()创建对象

  • Object()是一个构造函数
  • new关键字要搭配Object来使用,以调用构造函数
  • new Object()调用构造函数,会在内存中创建一个对象
    var hero = new Object();    //指创建了一个空的对象
    //若要打印一个不存在的属性如 hero.name ,则会输出undefined
    
        hero.name = '黄忠',
        hero.weapo = '弓箭',
        hero.equipment = ['头盔', '靴子', '盔甲'],
        hero.blood = 100,
        hero.attack = function () {
            console.log(this.name + '射箭');
        },
        hero.run = function () {
            console.log(this.name + '加速跑');
        }

工厂方法创建

需要有返回值return

​function creatHero(name, weapo, equipment, blood){

var hero = new Object();    //返回一个空的对象
    
    //属性
    hero.name = name,
    hero.weapo = weapo,
    hero.equipment = equipment,
    hero.blood = blood,
    hero.attack = function () {
        console.log(this.name + '射箭');
    },
    hero.run = function () {
        console.log(this.name + '加速跑');
    }
    return hreo;
​}

var hero1 = creatHero('黄忠', '弓箭', ['头盔', '靴子'], 100);
var hero1 = creatHero('周瑜', '剑', ['头盔', '盔甲'], 100);

自定义构造函数

new Object();

new Hreo();

都遵循帕斯卡命名:即第一个单词的第一个字母大写,后续的每一个单词的首字母都大写,而一般函数是遵循驼峰原则。这也就是看函数名区分自定义函数的关键。

​
​function Hero(name, weapo, equipment, blood){
    //this动态的给对象增加成员
    //this指向了当前对象
    
    //属性
    this.name = name,
    this.weapo = weapo,
    this.equipment = equipment,
    this.blood = blood,
    this.attack = function () {
        console.log(this.name + '射箭');
    },
    hero.run = function () {
        console.log(this.name + '加速跑');
    }
​}

构造函数中new的执行过程

  1. 在内存中创建了一个空的对象
  2. 让构造函数中的this指向刚刚创建的对象
  3. 执行构造函数,在构造函数中设置属性和方法(当然也可以做其他事情)
  4. 返回了当前对象

this关键字

this一般会出现在以下位置

  • 函数中  ----- this指向window
  • 方法中  -----this指向的是这个方法所属的对象
  • 构造函数中   -------this就是构造函数创建的对象
//函数
function student() {
    console.log(this);    //返回的是window,说明函数中的this指向window
}
student();

//对象   方法属于对象,eat()方法属于student对象
var student = {
    name: 'Eileen',
    eat: function () {
        console.log(this.name);    //this指向的是这个eat()方法所属的对象student
    }
};
student.eat();

//构造函数
function Stu() {
    this.name = 'Eileen',
    this.age = 17,
    console.log(this);    //指向的是构造函数创建的对象my
}
var my = new Stu();

 

for   in 的使用

可以遍历对象的成员,当不清楚对象的键值对时,可通过for in来查看对象的属性和方法

for (var key in student) {    //括号的表达式指key为student里面所有的属性方法
    console.log(key + '---' + student[ key ]);
}

删除属性

delete  student.name;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值