JavaScript中的对象个人分享

对象

对象的概念

  • 所谓对象就是是一个拥有属性和方法的集合体

对象的分类

  1. 内置对象/原生对象:

    • 引用类型可以称作为内置对象
  2. 宿主对象:

    • 就是寄生在一个东西上的对象比如浏览器提供的对象
    • 比如:DOM、BOM
  3. 自定义对象

    • 开发人员创建的对象
  • Object对象是什么

    • object类型是所有JavaScript类型的父级

创建对象

对象的初始化器创建方式

var 对象名 = {
属性名 : 属性值,
方法名 : function(){
方法体
}
}
  • 注意: 如果存在多个属性名的话中间用 " , "隔开

示例代码:

var obj1 = {
    name : '一花一世界',
    name1 : '一叶一孤城',
    soso : function () {
        console.log('你是哈士奇')
    }
};

对象的构造函数方式

  • 利用所有引用类型常见对应的对象 - 就是具有具体的类型

    • var num = new Number();// Number类型
    • var str = new String();// String类型
    • var boo = new Boolean();// Boolean类型
  • 利用Object作为构造函数创建对象

    • var 对象名 = new Object();
    • var 对象名 = Object();

示例代码:

var num = new Number();// Number类型
var num2 = Number();
var str = new String();// String类型
var boo = new Boolean();// Boolean类型

var obj2 = new Object();
var obj3 = Object();

console.log(obj2);// {}// 调用结果为 { }
console.log(obj3);// {}// 调用结果为 { }

var obj4 = new Object(undefined);
var obj5 = new Object(null);

console.log(obj4);// 调用结果为 { }
console.log(obj5);// 调用结果为 { }

利用Object.create()方法创建对象

  • var 对象名 = Object.create(null) - 就是创建一个空对象
  • var 对象名 = Object.create(obj)

    • obj - 表示另一个对象
    • 特点 - 当前创建的新对象拥有与obj对象相同的属性和方法

示例代码:

var obj6 = Object.create(null);
var obj7 = Object.create(obj1);

console.log(obj6);// 调用结果为 { }
console.log(obj7);// 调用结果为 { }

创建空对象

  • 创建空对象的方式目前有以下几种

    1. var obj1 = {};
    2. var obj2 = new Object();
    3. var obj3 = Object();
    4. var obj4 = new Object(undefined);
    5. var obj5 = new Object(null);
    6. var obj6 = Object(undefined);
    7. var obj7 = Object(null);
    8. var obj8 = Object.create(null);

创建方式的对比

  • Number,String和Boolean

    • 字面量方式创建的是原始类型,构造函数方式创建是引用类型
  • Array和Object

    • 无论是字面量方式还是构造函数方式创建的都是引用类型

示例代码:

// 1. Number类型
var num1 = 100;// 字面量方式
var num2 = new Number();// 构造函数方式

// 2. String类型
var str1 = '一花一世界';// 字面量方式
var str2 = new String();//构造函数方式

// 3.Boolean类型
var boo1 = true;// 字面量方式
var boo2 = new Boolean();// 构造函数方式

// 4.Array类型
var arr1 = [];
var arr2 = new Array();

// 5.Object类型
var obj1 = {};
var obj2 = new Object();

变量与对象

示例代码:

/* 变量声明并初始化值 */
var obj = 100;
/* 输出调用 */
console.log(obj);// 调用结果为 100
/* 变量重新赋值为对象 */
obj = {
    /* 对象的属性 */
    name : '一花一世界',
    /* 对象的方法 */
    soso : function () {
        /* 方法体 */
        console.log('一叶一孤城');
    }
};
/* 输出调用 */
console.log(obj);// 调用结果为 { name: '一花一世界', soso: [Function: soso] }

变量,函数与对象

  • 注意: 如果访问一个对象不存在的属性时 - 值为 undefined

示例代码:

var obj = {
    neme : '一花一世界',
    'Type-Content' : 'text/HTML',
    sayMe : function () {
        console.log('一叶一孤城');
    }
};

console.log(obj.soso);// 调用结果为 undefined
  • 创建一个对象 - 具有name和age属性与sayMe()方法

    • 对象的属性 - 类似于变量
    • 对象的属性 - 类似于变量
  • 其实定义的变量就是某个对象的属性,定义的函数就是某个对象的方法
  • JavaScript找那个具有一个全局对象(Global) - 仅存在与概念

    • 浏览器运行环境 - BOM中Window(窗口)对象
    • Node.js运行环境

示例代码:

var obj1 = {
    name : '一花一世界',
    age : '有点飘',
    sayMe : function () {
        console.log('一叶一孤城');
    }
};
console.log(Object);// 调用结果为 [Function: Object]
console.log(Global);// 调用结果为报错 - ReferenceError: Global is not defined

控制台调用图:
图片描述


调用对象的属性方式

对象名.属性名 - 名称简单的调用方式

  • 注意: 不适合用于复杂命名的属性名称

示例代码:

var obj = {
    neme : '一花一世界',
    'Type-Content' : 'text/HTML',
    sayMe : function () {
        console.log('一叶一孤城');
    }
};

console.log(obj.neme);// 调用结果为 一花一世界

控制台调用图:
图片描述

对象名称[属性名] - 通用的调用方式

  • 适用于复杂命名的属性名称
  • 特点: 该种方式比较通用

示例代码:

var obj = {
    neme : '一花一世界',
    'Type-Content' : 'text/HTML',
    sayMe : function () {
        console.log('一叶一孤城');
    }
};

console.log(obj.neme);// 调用结果为 一花一世界
console.log(obj['Type-Content']);// 调用结果为 text/HTML

控制台调用图:
图片描述


修改对象的属性

对象名.已存在的属性名 = 属性值

示例代码:

var obj = {
    name : '一花一世界',
    sayMe : function(){
        console.log('一花一世界');
    }
}

obj.name = '一叶一孤城';
console.log(obj);// 调用结果为 { name: '一叶一孤城', sayMe: [Function: sayMe] }

对象名[已存在的属性名] = 属性值

示例代码:

var obj = {
    name : '一花一世界',
    sayMe : function(){
        console.log('一花一世界');
    }
}

obj['name']
console.log(obj);// 调用结果为 { name: '一叶一孤城', sayMe: [Function: sayMe] }

删除对象的属性

delete 对象名.属性名

示例代码:

var obj = {
    name : '一花一世界',
    sayMe : function(){
        console.log('一花一世界');
    }
}

delete obj.name;
console.log(obj.name);//调用结果为 undefined

delete 对象名[属性名]

示例代码:

var obj = {
    name : '一花一世界',
    sayMe : function(){
        console.log('一花一世界');
    }
}

delete obj['name'];
console.log(obj.name);//调用结果为 undefined

检测对象的属性

判断对象的属性值是否为 undefined

示例代码:

var obj = {
    name : '张无忌',
    age : 18
}

if (obj.age !== undefined) {
    console.log('obj对象的age属性存在...');
} else {
    console.log('请先定义obj对象的age属性...');
}

判断对象的属性值 - 先转换为Boolean类型

示例代码:

var obj = {
    name : '张无忌',
    age : 18
}

if (obj.age) {
    console.log('obj对象的age属性存在...');
}

利用in关键字进行判断

示例代码:

var obj = {
    name : '张无忌',
    age : 18
}

if ('age' in obj) {
    console.log('obj对象的age属性存在...');
} else {
    console.log('obj对象的age属性不存在...')
}

Object类型提供了hasOwnProperty()方法

示例代码:

var obj = {
    name : '张无忌',
    age : 18
}

if (obj.hasOwnProperty('age')) {
    console.log('obj对象的age属性存在...');
} else {
    console.log('obj对象的age属性不存在...')
}

遍历对象的属性

示例代码:

var obj = {
    name : '一花一世界',
    age : 18,
    sayMe : function(){
        console.log('一花一世界');
    }
}
// 1.for...in语句
for (var objAttr in obj) {
    // 通过对象属性或方法对应的值的类型进行区别
    if (obj[objAttr] instanceof Function) {
        // 当前是对象的方法
        obj[objAttr]();
    } else {
        // 当前是对象的属性
        console.log(obj[objAttr]);
    }
}

// 2.Object类型提供了keys()方法 - 只能遍历可枚举的属性
var arr = Object.keys(obj);
for (var v in arr) {
    var objAttr = arr[v];
    // 通过对象属性或方法对应的值的类型进行区别
    if (obj[objAttr] instanceof Function) {
        // 当前是对象的方法
        obj[objAttr]();
    } else {
        // 当前是对象的属性
        console.log(obj[objAttr]);
    }
}

// 3.Object类型提供了getOwnPropertyNames()方法 - 包括不可枚举的属性
var arr = Object.getOwnPropertyNames(obj);
for (var v in arr) {
    var objAttr = arr[v];
    // 通过对象属性或方法对应的值的类型进行区别
    if (obj[objAttr] instanceof Function) {
        // 当前是对象的方法
        obj[objAttr]();
    } else {
        // 当前是对象的属性
        console.log(obj[objAttr]);
    }
}

调用对象的方法

  1. 对象名.方法名()
  2. 对象名[方法名]()

示例代码:

var obj = {
    name : '一花一世界',
    age : 18,
    sayMe : function(){
        console.log('一花一世界');
    }
}
// 1.对象名.方法名()
obj.sayMe();
// 2.对象名[方法名]()
obj['sayMe']();

新增对象的方法

  • 注意: 和新增对象的属性方法类似

示例代码:

var obj = {
    name : '一花一世界',
    age : 18,
    sayMe : function(){
        console.log('我是风儿');
    }
}
// 1.对象名.新的方法名 = function(){}
obj.sayYou = function(){
    console.log('你是沙');
}
console.log(obj);
// 2.对象名[新的方法名] = function(){}

修改对象的方法

  • 注意: 和修改对象属性的方法类似

示例代码:

var obj = {
    name : '一花一世界',
    age : 18,
    sayMe : function(){
        console.log('我是风儿');
    }
}
// 1.对象名.方法名 = function(){}
obj.sayMe = function(){
    console.log('你是沙');
}
console.log(obj);
obj.sayMe();
// 2.对象名[方法名] = function(){}

删除对象的方法

  • 注意: 和删除对象属性的方法类似

示例代码:

var obj = {
    name : '一花一世界',
    age : 18,
    sayMe : function(){
        console.log('一笑一人生');
    }
}
// 1.delete 对象名.方法名
delete obj.sayMe;
// 访问对象中不存在的方法 -> 报错(TypeError: obj.sayMe is not a function)
// obj.sayMe();
console.log(obj.sayMe);// undefined
console.log(obj);

// 以属性是否存在的方式进行判断
if ('sayMe' in obj) {
    // 确认目前是一个方法
    if (obj.sayMe instanceof Function) {
        obj.sayMe();// 方法调用
    }
}
// 以上代码可以优化为以下代码
if ('sayMe' in obj && obj.sayMe instanceof Function) {
    obj.sayMe();// 方法调用
}

// 2.delete 对象名[方法名]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值