介绍JavaScript编程语言里的对象

135 阅读6分钟

对象

在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、 函数等。

对象的应用场景:描述复杂的事务

  • 对象是由属性方法组成的。

    • 属性:事物的特征,在对象中用属性来表示(常用名词)
    • 方法:事物的行为,在对象中用方法来表示(常用动词)

创建对象的三种方式

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

对象:一组数据的集合,属性和方法的集合,对这个对象进行描述。
对象的创建:
    var 对象名 = {
      属性:属性值,
      方法:函数
    }
对象的访问:
    对象名.属性  对象名.方法()   
    对象名[‘属性’] 对象名[‘方法’]()
创建空对象再去赋值:
    var obj = { }
    var obj = new Object()
    obj.name = 'zs'
    obj.sex = '男'
    obj.sayhi = function () {
        alert('sayhi')
    }
创建有内容的对象:两种方法
    var obj = {
        name: 'zs',
        sex: 'nan',
        sayhi: function () {
            alert('sayhi')
        }
    }
    var obj = new Object({
        name: 'zs',
        sex: 'nan',
        sayhi: function () {
            alert('sayhi')
        }
    })
​
  • 利用字面量创建对象

    • 对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)的属性和方法。 { } 里面采取键值对的形式表示
    • 键:相当于属性名
    • 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
  • 对象的调用:

    • 对象里面的属性调用 : 对象.属性名 ,console.log(obj.uname);这个小点 . 就理解为“ 的 ”
    • 对象里面属性的另一种调用方式 : 对象[‘属性名’],注意方括号里面的属性必须加引号console.log(obj['age']);我们后面会用
    • 对象里面的方法调用:对象.方法名() ,obj.teC()注意这个方法名字后面一定加括号 ,或者另一种obj['address']()

    var obj = {
        uname: '可可',
        age: 5,
        type: '阿拉斯加',
        teC: function() {
            return '吃'
        },
        address: function() {
            return '中国'
        }
    }
    console.log(obj.uname);
    console.log(obj['age']);
    console.log(obj.teC());
    console.log(obj['address']());
//结果:可可 5 吃 中国
  • 利用 new Object 创建对象

    • 跟我们前面学的 new Array() 原理一致
    • Object() :第一个字母大写
    • new Object() :需要 new 关键字
    • 使用的格式:对象.属性 = 值;
    • 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
    • 每个属性和方法之间用 分号结束

    var obj = new Object();
    obj.uname = '鸣人';
    obj.age = 33;
    obj.skill = function() {
        console.log('影分身');
    }
    console.log(obj['uname']);
    obj.skill()
  • 利用构造函数创建对象

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

    • 在 js 中,使用构造函数要时要注意以下两点:

      • 构造函数用于创建某一类对象,其首字母要大写
      • 构造函数要和 new 一起使用才有意义
  • 为什么需要构造函数:

    • 通过构造函数创建的对象具有相同的属性与方法
    • 构造函数属于函数的一种
    • 通过构造函数创建的对象,成为实例
  • 构造函数语法格式:

    • 
          function 构造函数名() {
              this.属性 = 值;
              this.方法 = function() {}
          }
          new 构造函数名();
      
    
      
    ​
    - ```js
          function Star(name, age, sex) {
              this.name = name
              this.age = age
              this.sex = sex
          }
          var ldh = new Star('刘德华', 20, '男')
          console.log(ldh.name);
          console.log(ldh['name']);
      //我们只要new Star() 调用函数就创建一个对象 zxy  {}
          var zxy = new Star('张学友', 34, '男')
          console.log(zxy.sex);
          console.log(zxy);
  • 构造函数注意点:

    • 构造函数约定首字母大写。
    • 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法
    • 构造函数中不需要 return 返回结果。
    • 如果return的是简单数据类型return 'abc',不影响构造函数的返回值
    • 如果return的是复杂数据类型return {name: 'ldh'} ,会影响构造函数的返回值
    • 当我们创建对象的时候,必须用 new 来调用构造函数。

new关键字(重要)

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

    • 在内存中创建一个新的空对象。
    • 让 this 指向这个新的对象。
    • 执行构造函数里面的代码,给这个新对象添加属性和方法。
    • 返回这个新对象(所以构造函数里面不需要return)。

遍历对象for in


for (变量 in 对象){}

        // 遍历对象 
        var obj = {
                name: '老师',
                age: 18,
                sex: '男',
                fn: function() {}
            }
            // for in 遍历我们的对象
            // for (变量 in 对象) {
​
        // }
        for (var k in obj) {
            console.log(k); // k 变量 输出  得到的是 属性名
            console.log(obj[k]); // obj[k] 得到是 属性值
​
        }
        // 我们使用 for in 里面的变量 我们喜欢写 k  或者  key

内置对象

  • JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象
  • 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
  • 内置对象最大的优点 就是帮助我们快速开发
  • JavaScript 提供了多个内置对象:Math、 Date 、Array、String等

查文档

MDN: developer.mozilla.org/zh-CN/

  • 如何学习对象中的方法

    • 查阅该方法的功能
    • 查看里面参数的意义和类型
    • 查看返回值的意义和类型
    • 通过 demo 进行测试

Math对象


    console.log(Math.PI);
    console.log(Math.max(1, 33, 44));
    // 取绝对值
    console.log(Math.abs(-5)); //5
​
    // 向下取整(往小了取)(地板函数)
    console.log(Math.floor(3.4)); //3
    console.log(Math.floor(-5.5)); //-6
​
    // 向上取整(往大了取)(天花板函数)
    console.log(Math.ceil(1.2)); //2
​
    // 四舍五入
    console.log(Math.round(5.5)); //6
​
    // 注意: Math.round 遇到 .5 的情况则往大了取
    console.log(Math.round(-1.5)); //-1
    console.log(Math.round(-3.5)); //-3
    console.log(Math.round(-5.4)); //-5
    console.log(Math.round(7.6)); //8

封装自己的数学对象 :


    var myMath = {
        PI: 3.1415926,
        max: function() {
            var max = arguments[0]
            for (i = 1; i < arguments.length; i++) {
                if (arguments[i] > max) {
                    max = arguments[i]
                }
            }
            return max
        },
        min: function() {
            var min = arguments[0]
            for (i = 1; i < arguments.length; i++) {
                if (arguments[i] < min) {
                    min = arguments[i]
                }
            }
            return min
        }
    }
    console.log(myMath.PI);
    console.log(myMath.max(11, -766, 777));
    console.log(myMath.min(12, -3, 766, 777));

字符串操作方法(重点)

        // 1. concat('字符串1','字符串2'....)
        var str = 'andy';
        console.log(str.concat('red'));

        // 2. substr('截取的起始位置', '截取几个字符');
        var str1 = '改革春风吹满地';
        console.log(str1.substr(2, 2)); // 第一个2 是索引号的2 从第几个开始  第二个2 是取几个字符
        //只操作复印件,不会影响原件
        // 1. 替换字符 replace('被替换的字符', '替换为的字符')  它只会替换第一个字符
        var str = 'andyandy';
        console.log(str.replace('a', 'b'));
        // 有一个字符串 'abcoefoxyozzopp'  要求把里面所有的 o 替换为 *
        var str1 = 'abcoefoxyozzopp';
        while (str1.indexOf('o') !== -1) {
            str1 = str1.replace('o', '*');
        }
        console.log(str1);

       // 2. 字符转换为数组 split('分隔符')    前面我们学过 join 把数组转换为字符串
        var str2 = 'red, pink, blue';
        console.log(str2.split(','));
        var str3 = 'red&pink&blue';
        console.log(str3.split('&'));