初识对象

  • 面向对象的特征

    • 封装性、继承性、多态性
    • 对象是键值对的集合:对象是由属性和方法构成的 (ps:也有说法为:对象里面皆属性,认为方法也是一个属性)
  • 对象属性操作

    var student = {
        name: 'sunny',
        age: 20,
        number: '11034P',
        department: 'newEnergy',
        score: function(){
            return '成绩查询系统!';
        },
        job: function(){
            return '就业查询系统!';
        }
    }
    var arr = [];

    // .语法
    // .语法后面不能使用js中的关键字、保留字(class、this、function。。。)
    // .语法后面不能使用数字
    // .语法后面可直接执行方法函数
    console.log(student.name);
    console.log(student.score());

    // []语法
    // []内部必须用引号引入变量名 (student['number']
    // ["class"]、["this"]等保留字都可以随意使用
    // [0]、[1]、[2]也可以使用 ? 为什么obj[3]==obj["3"]
    // 甚至还可以这样用:["[object Array]"]  jquery里面就有这样的实现
    // 也可以这样用:["{abc}"]  给对象添加了{abc}属性
    console.log(student['age']);
    console.log(student['job']);

    // 添加属性
    student['[object Array]'] = 240;
    student['{object}'] = {'arts':85, 'sports': 95};
    for(key in student){
        arr.push(key);
    }
    console.log(student);
    console.log(arr);
    arr = [];

    // 修改属性
    student.gender = 'man';
    student['direction'] = function(){
        return '人工智能与图形操作';
    }
    for(key in student){
        arr.push(key);
    }
    console.log(student);
    console.log(arr);
    arr = [];

    // 删除属性
    delete student.number;
    for(key in student){
        arr.push(key);
    }
    console.log(student);
    console.log(arr);
    arr = [];
  • 获取对象长度的方法
    • 对象的长度不能用.length获取
    • Object具有一个keys属性,可以返回json对象的key的数组
    • Object可以使用in运算符
    var student = {
        name: 'sunny',
        age: 20,
        number: '11034P',
        department: 'newEnergy',
        score: function(){
            return '成绩查询系统!';
        },
        job: function(){
            return '就业查询系统!';
        }
    }

    var arr = [];

    arr = Object.keys(student);
    console.log(arr.length);
    arr = [];

    for(key in student){
        arr.push(key);
    }
    console.log(arr.length);
    arr = [];

    console.log('name' in student);
  • 对象的浅拷贝与深拷贝
    // 浅拷贝
    var student = {
        name: 'sunny',
        age: 20,
        number: '11034P',
        department: 'newEnergy',
        score(){
            return '成绩查询系统!';
        },
        job(){
            return '就业查询系统!';
        }
    }
    var simple = obj=>{
        let newObj = {};
        for(let key in obj){
            newObj[key] = obj[key];
        }
        return newObj;
    }
    var sunny = simple(student);
    console.log(sunny);
    // 深拷贝
    var student = {
        name: 'sunny',
        age: 20,
        number: '11034P',
        department: 'newEnergy',
        score: {
            arts: 95,
            sports: 85,
            program: 95
        },
        job(){
            return '就业查询系统!';
        }
    }

    var deepCopy = obj=>{
        var newObj = {};
        for(let key in obj){
            newObj[key] = (typeof obj[key] === 'object') ? deepCopy(obj[key]) : obj[key];
        }
        return newObj;
    }
    var sunny = deepCopy(student);
    console.log(sunny);
posted @ 2020-08-23 08:43  wing1377  阅读(112)  评论(0编辑  收藏  举报