• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > ES6--对象的扩展

ES6--对象的扩展

作者:zcy_csdn123 字体:[增加 减小] 来源:互联网 时间:2017-09-18

zcy_csdn123通过本文主要向大家介绍了es6遍历对象,es6 对象合并,es6 对象,es6定义对象,es6 扩展运算符等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

属性

 

//ES6
function(x, y){
    return {x,y}
}
//原来
function(x, y){
    return {x:x, y:y}
}

方法

//ES6
var obj = {
    method(){
        return "hello"
    }
}
//原
var obj = {
    method:function(){
        return "hello"
    }
}

属性表达式
可以把表达式作为属性名

let abc = 'foo'
let obj = {
    [abc] : true,
    ['a'+'bc'] : 123
}

表达式还可以用于定义方法名

let obj = {
    ['h'+'ello'](){
        return "hi"
    }
}
obj.hello();//hi

ES6新的写法是让我们定义属性名,方法名等边更加灵活了。

Object.assign()
用来将源对象(source)的所有可枚举属性(方法),复制到目标对象(target)
至少需要两个对象作为参数,如果参数不是对象就报错。
用法

var target = {a:1}
var source1 = {b:2}
var source2 = {c:3}
Object.assign(target,source1,source2);
target //{a:1,b:2,c:3}

作用
一、为对象添加属性

class Point{
    constructor(x,y){
        Object.assign(this, {x,y})
    }
}

上面方法通过 assign 方法,将 x 属性和 y 属性添加到 Point 类的对象实例。
二、为对象添加方法

Object.assign(SomeClass.prototype, {
  someMethod(arg1, arg2) {
    ···
  },
  anotherMethod() {
    ···
  }
});

// 等同于下面的写法
SomeClass.prototype.someMethod = function (arg1, arg2) {
  ···
};
SomeClass.prototype.anotherMethod = function () {
  ···
};

上面代码使用了对象属性的简洁表示法,直接将两个函数放在大括号中,再使用 assign 方法添加到 SomeClass.prototype 之中。
这个方法让我想起了解构赋值那部分:为对象添加方法

let {cos,sin,tan} = Math;

不知道还记得么,如果在Object.assign()里将Math作为源对象那么会将所有的方法都复制到新对象,并不是想要达到的效果,具体问题使用合理的,这里只是让大家回忆一下哈。

三、克隆对象

function clone(origin){
    return Object.assign({}, origin);
}

很容易理解,将origin复制一份到空对象,那么空对象就有了origin(源对象的一切方法和属性)。

四、合并多个对象

let merge = (...sources) => Object.assign({}, ...sources);

将多个合并到一个(空或非空)对象。

let source1 = {a:1}
let source2 = {a:1,b:2}
let source3 = {a:3,b:3,c:3};
let target = Object.assign({},source1,source2,source3);
console.log(target);

当对象中有同名的属性时,后面的会覆盖前面的。很合理

五、为属性指定默认值

const DEFAULTS = {
  logLevel: 0,
  outputFormat: 'html'
};

function processContent(options) {
  let options = Object.assign({}, DEFAULTS, options);
}

上面代码中,DEFAULTS 对象是默认值,options 对象是用户提供的参数。assign 方法将 DEFAULTS 和 options 合并成一个新对象

Object.is()
Object.is()用来比较两个值是否严格相等。它与(===)的行为基本一致,不同之处:一是+0不等于-0,二是NaN等于自身。

+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

这个方法算是对以前严格比较的补充吧,具体开发中如果认为+0 等于-0 时候用(===),不等的时候用Object.is(),NaN同理。更全面了。

Object.observe() Object.unobserve()
用来监听对象(以及数组)的变化。一旦发生变化,就出发回调。
一般情况下,Object.observe 方法接受两个参数,第一个参数是监听的对象,第二个函数是一个回调函数。一旦监听对象发生变化(比如新增或删除一个属性),就会触发这个回调函数。

var user = {};
Object.observe(user, function(changes){
  changes.forEach(function(change) {
    user.fullName = user.firstName+" "+user.lastName;
  });
});

user.firstName = 'Michael';
user.lastName = 'Jackson';
user.fullName // 'Michael Jackson'

上面代码中,Object.observer 方法监听 user 对象。一旦该对象发生变化,就自动生成 fullName 属性。
Object.observe 方法目前共支持监听六种变化
add:添加属性
update:属性值的变化
delete:删除属性
setPrototype:设置原型
reconfigure:属性的 attributes 对象发生变化
preventExtensions:对象被禁止扩展(当一个对象变得不可扩展时,也就不必再监听了)
Object.observe 方法还可以接受第三个参数,用来指定监听的事件种类

Object.observe(o, observer, ['delete']);

Object.unobserve 方法用来取消监听

Object.unobserve(obj, observer);
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ES6--对象的扩展

相关文章

  • 2017-05-11JavaScript中undefined和null的区别
  • 2017-05-11js实现前端分页页码管理
  • 2017-05-11jQuery多选框选择数量限制方法
  • 2017-05-11javascript设计模式之单体模式学习笔记
  • 2017-05-11JavaScript数据结构之二叉树的遍历算法示例
  • 2017-05-11jquery实现下拉框左右选择功能
  • 2017-05-11NodeJS学习笔记之Module的简介
  • 2017-05-11ES6学习笔记之Set和Map数据结构详解
  • 2017-05-11jquery实现图片上传前本地预览
  • 2017-05-11Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • vue日期组件 支持vue1.0和2.0
    • jquery仿微信聊天界面
    • Vue.js组件tab实现选项卡切换
    • jQuery实现扑克正反面翻牌效果
    • Vue.js自定义指令的用法与实例解析
    • Web 开发中Ajax的Session 超时处理方法
    • js获取浏览器的各种属性
    • javascript实现复选框全选或反选
    • nodeJs链接Mysql做增删改查的简单操作
    • es6的数字处理的方法(5个)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有