JS-对象

169 阅读6分钟

目录

  • 对象
  • 创建对象得三种方式
  • new关键字
  • 遍历对象属性

一、对象

1.1、什么是对象?

在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。 属性:事物的特征,在对象中用属性来表示(常用名词) 方法:事物的行为,在对象中用方法来表示(常用动词) 为什么需要对象? 保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组。 如果要保存一个人的完整信息呢?

  例如,将“克比”的个人的信息保存在数组中的方式为:

var arr = [‘克比’, ‘男', 128,154];

上述例子中用数组保存数据的缺点是:数据只能通过索引值访问,开发者需要清晰的清除所有的数据的排行才能准确地获取数据,而当数据量庞大时,不可能做到记忆所有数据的索引值。 为了让更好地存储一组数据,使用对象记录上组数据为:

var obj = {
    "name":"克比",
    "sex":"男",
    "age":128,
    "height":154
}

二、创建对象得三种方式

在JavaScript中,现阶段我们可以采用三种方式创建对象(object):

  • 利用字面量创建对象
  • 利用new Object创建对象
  • 利用构造函数创建对象

2.1、利用字面量创建对象

对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)得属性和方法。 { } 里面采取键值对得形式表示

  • 键:相当于属性名
  • 值:相当于属性值,可以是任意类型得值(数字类型、字符串类型、布尔类型、函数类型等)
2.1.1、对象得调用
  • 对象里面得属性调用:对象.属性名,这个小点. 就理解为“的”
  • 对象里面属性的另一种调用方式:对象[ '属性名' ],注意方括号里面的属性必须加引号
  • 对象里面的方法调用:对象.方法名(),注意这个方法名字后面一定加括号
// 1. 利用对象字面量创建对象 { }
// var obj = { };  // 创建了一个空的对象
var obj = {
  uname = '张三丰';
  age = 18,
  sex = '男';
  sayHi : function( ){
     console.log( 'hi~' ); 
  }
}
// (1) 里面的属性或者方法我们采取键值对的形式  键 属性名:  值  属性值
// (2) 多个属性或者方法中间用逗号隔开的
// (3) 方法冒号后面跟的是一个匿名函数
// 2. 使用对象
// (1). 调用对象的属性  我们采取  对象名.属性名  . 我们理解为  的
console.log( obj.uname );
// (2). 调用属性还有一种方法  对象名[ '属性名' ]
console.log( obj[ 'age' ] );
// (3). 调用对象的方法  sayHi    对象名.方法名()  千万别忘记添加小括号
obj.sayHi( );
2.1.2、变量、属性、函数、方法总结
// 1. 变量和属性的相同的  他们都是用来存储数据的
var num = 10;
var obj = {
   age : 18;
   fn : function( ) {

   }
}
function fn( ) {

} 
console.log( obj.age );

// 变量  单独声明并赋值   使用的时候直接写变量名  单独存在
// 属性  在对象里面的不需要声明的  使用的时候必须是  对象.属性
// 2. 函数和方法的相同点  都是实现某种功能  做某件事
// 函数是单独声明  并且调用的  函数名() 单独存在的
// 方法 在对象里面  调用的时候  对象.方法()

2.2、利用 new Object 创建对象

var obj = new Object( ); // 创建了一个空的对象
obj.uname = '张三丰';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function( ) {
           console.log( 'hi~');
      }
      // (1) 我们是利用 等号 = 赋值的方法  添加对象的属性和方法
      // (2) 每个属性和方法直接用 分号结束
console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi( );

2.3、利用构造函数创建对象

构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

// 利用构造函数创建对象
// 我们需要创建四大天王的对象  相同的属性:名字  年龄  性别   相同的方法:唱歌
// 构造函数的语法格式
// function 构造函数名(){
//        this.属性 = 值;
//        this.方法 = function( ) { }
//    }
//  new 构造函数名( ) ;
function Star( ) {

}
new Star('刘德华', 18,  '女');


function Star (uname,age,sex) {
     this.name = uname;
     this.age = age;
     this.sex = sex;
     this.sing = function( sang ) {
              console.log( sang)
      }
}
var ldh = new Star('刘德华', 18,  '女');  // 调用函数返回的是一个对象
console.log( ldh.name );
console.log( ldh[ 'sex' ]);
ldh.sang('冰雨');

// 1. 构造函数名字首字母要大写
// 2. 我们构造函数不需要 return 就可以返回结果
// 3. 我们调用构造函数  必须使用 new
// 4. 我们只要new Star()调用函数就可以创建一个对象 ldh { }
// 5. 我们的属性和方法前面必须添加  this

2.4、构造函数和对象

  • 构造函数,如Stars( ),抽取了对象的公共部分,封装到了函数里面,它泛指某一大类(class)
  • 创建对象,如 new Stars( ),特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化
// 构造函数和对象
// 1. 构造函数 明星 泛指的某一大类  它类似于 java 语言里面的  类(class)
function Star( uname, age, sex ) {
          this.name = uname;
          this.age = age;
          this,sex = sex;
          this.sing = function( sang) {
              console.log( sang );
          }
}
// 2. 对象  特质  是一个具体的事物 刘德华 == { name : '刘德华',age : 18, sex : '男',sing :f}
var ldh = new Star( '刘德华', 18, '男');  // 调用函数返回的是一个对象
console.log(ldh);
// 3. 我们利用构造函数创建对象的过程我们也称为对象的实例化

三、new 关键字执行过程

// new 构造函数可以在内存中创建了一个空的对象
// 1. new 构造函数可以在内存中创建了一个空的对象
// 2. this 就会指向刚才创建的空对象
// 3. 执行构造函数里面的代码  给这个空对象添加属性和方法
// 4.返回这个对象
function Star( uname, age, sex ) {
    this.name = uname;
    this.age = age;
    this.sex = sex;
    this.sing = function( sang ) {
      console.log( sang );
     }
}
var ldh = new Star('刘德华', 18, ' 女');

三、new 关键字

new 在执行时会做四件事情:

  1. 在内存中创建一个新的空对象
  2. 让 this 指向这个新的对象
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法
  4. 返回这个新对象(所以构造函数里面需要return)
// new 关键字执行过程
// 1. new 构造函数可以在内存中创建了一个空的对象
// 2. this 就会指向刚才创建的空对象
// 3. 执行构造函数里面的代码  给这个空对象添加属性和方法
// 4. 返回这个对象

function Star( uname, age, sex ) {
     this.name = uname;
     this.age = age;
     this.sex = sex;
     this.sing = function( sang ) {
         console.log( sang );
      }
}
var ldh = new Star('刘德华', 18, '男');

四、遍历对象属性

var obj = {
        name : 'pink先生',
        age : 18,
        sex : '男',
        fn : function( ) { }
}
// console.log(obj.name);

//for in 遍历我们的对象
// for( 变量 in 对象 ){

// }

for ( var k in obj) {
     console.log( k );  //  k 变量 输出 得到的是  属性名
     console.log( obj[ k ] );  // obj[ k ] 得到是  属性值
}
// 我们使用 for in 里面的变量 我们喜欢写  k  或者  key

4.1、小结

    1. 对象可以让代码结构更清晰
    1. 对象复杂数据类型object
    1. 本质:对象就是一组无序的相关属性和方法的集合
    1. 构造函数泛指某一大类,比如苹果,不管是红色苹果还是绿色苹果,都统称为苹果
    1. 对象实例特质一个事物,比如这个苹果
    1. for ...in 语句用于对对象的属性进行循环操作