当前位置: 首页 > news >正文

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 对象名[方法名]

相关文章:

  • Python数据结构
  • Discuz!X3.1 全新安装图文教程
  • 关于Solr的使用总结的心得体会
  • paip.语义分析--单字词形容词表180个
  • vue格式化快捷键设置
  • jQuery学习——克隆
  • IBM WebSphere MQ介绍安装以及配置服务详解
  • 思维导图—你不知道的JavaScript中卷
  • C# 类相同属性赋值
  • MVC验证
  • UVa10305 拓扑排序
  • 专科程序员与本科程序员之间有什么区别?
  • HTTP协议
  • 算法一:动态规划
  • Redis学习笔记 - pipline(流水线、管道)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • AHK 中 = 和 == 等比较运算符的用法
  • centos安装java运行环境jdk+tomcat
  • hadoop集群管理系统搭建规划说明
  • jQuery(一)
  • js面向对象
  • Material Design
  • 大数据与云计算学习:数据分析(二)
  • 开发基于以太坊智能合约的DApp
  • 前端相关框架总和
  • 王永庆:技术创新改变教育未来
  • 线性表及其算法(java实现)
  • 因为阿里,他们成了“杭漂”
  • 再谈express与koa的对比
  • 自动记录MySQL慢查询快照脚本
  • 你对linux中grep命令知道多少?
  • 湖北分布式智能数据采集方法有哪些?
  • ​第20课 在Android Native开发中加入新的C++类
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #微信小程序:微信小程序常见的配置传值
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (6)设计一个TimeMap
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (篇九)MySQL常用内置函数
  • (转)Linux下编译安装log4cxx
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net Winform开发笔记(一)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)