ES5对象(超类)原有:

属性:construct构造函数

方法:

object.hasOwnProperty( propertyName )  //检测是否有一个本地的属性而不是继承的,返回boolen
prototypeObject.isPrototypeOf( object )  //检测指示对象是否存在于另一个对象的原型链中,返回boolen
propertyIsEnumerable()  //指定属性是否为对象的一部分以及该属性是否是可枚举的,返回boolen
var arr = [1, 2];
arr.propertyIsEnumerable( 1 ) ; // true
// 数组的length为内置属性
arr.propertyIsEnumerable( "length" ) // false
object.valueOf( )  //返回指定对象的原生值
// Date:当前时间距1970年1月1日午夜的毫秒数
var date = new Date(2013, 7, 18, 23, 11, 59, 230);
date.valueOf() ; // // Number:返回数字值
var num = 15.26540;
num.valueOf() ; // 15.2654

静态方法:


property特征:

1. value:值,默认是undefined

2. writable:是否可更改,默认是false

3. enumerable:是否可以被枚举(for in),默认false

4. configurable:是否可以被删除,默认false

get/set不能和value、writable同时使用

5.get:返回property的值得方法,默认是undefined

6.set:为property设置值的方法,默认是undefined


Object.create(prototype[,descriptors])  //通过指定原型及属性创建一个新对象

var d = Object.create({a:1});
console.log(d);  //Object {a:1}
var e = Object.create(Array);
console.log(e);  //Function {}

Object.defineProperties()  //创建或配置多个属性

Object.defineProperty()  //创建或配置某个属性

var o = {};   //这里的o对象必须提前定义
//多个属性
Object.defineProperties(o, {
'age': {
value: 24,
writable: true,
enumerable: true,
configurable: true
},
'sex': {
value: 'male',
writable: false,
enumerable: false,
configurable: false
}
});
console.log(o); //Object {age: 24, sex: "male"} //单个属性
Object.defineProperty(o,'age', {
value: 24,
writable: true,
enumerable: true,
configurable: true
});

Object.getOwnPropertyDescriptor(obj,property)  //获取指定对象的指定属性

var props = Object.getOwnPropertyDescriptor(o, 'age');
console.log(props); //Object {value: 24, writable: true, enumerable: true, configurable: true}

Object.getOwnPropertyNames()  //返回指定对象的所有非继承包括不可枚举属性名的数组

console.log(Object.getOwnPropertyNames(o)); //["age", "sex"]

Object.getPrototypeOf()  //返回指定对象的原型

Object.keys()  //返回指定对象所有非继承可枚举属性名的数组(注意与getOwnPropertyNames的区别)

Object.preventExtensions(obj)//阻止向指定对象添加新的属性,但是仍可以更改旧的属性

Object.isExtensible(obj) //检测对象是否可以添加新的属性

Object.seal(obj)  //阻止向指定对象添加新属性或者是删除现有属性

Object.isSealed(obj)  //检测是否密封

Object.freeze(obj)  //完全冻结,属性的一切操作均无效

Object.isFrozen(obj)  //是否已冻结

ES6对象的扩展

属性的简化:

ES6允许直接写入变量和函数,作为对象的属性和方法

var birth = '2000/01/01';

var Person = {

  name: '张三',

  //等同于birth: birth
birth, // 等同于hello: function ()...
hello() { console.log('我的名字是', this.name); } };

注意,属性名表达式与简洁表示法,不能同时使用,会报错。

// 报错
var foo = 'bar';
var bar = 'abc';
var baz = { [foo] }; // 正确
var foo = 'bar';
var baz = { [foo]: 'abc'};

函数的name属性,返回函数名。对象方法也是函数,因此也有name属性。如果使用了取值函数,则会在方法名前加上get。如果是存值函数,方法名的前面会加上set

var person = {
sayName() {
console.log(this.name);
},
get firstName() {
return "Nicholas"
}
} person.sayName.name // "sayName"
person.firstName.name // "get firstName"

有两种特殊情况:bind方法创造的函数,name属性返回“bound”加上原函数的名字;Function构造函数创造的函数,name属性返回“anonymous”。

(new Function()).name // "anonymous"

var doSomething = function() {
// ...
};
doSomething.bind().name // "bound doSomething"

如果对象的方法是一个Symbol值,那么name属性返回的是这个Symbol值的描述

const key1 = Symbol('description');
const key2 = Symbol();
let obj = {
[key1]() {},
[key2]() {},
};
obj[key1].name // "[description]"
obj[key2].name // ""

Object.is()

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

Object.assign()第一个参数是目标对象,后面的参数都是源对象。用于对象合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

var target = { a: 1, b: 1 };

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

只有一个参数则返回参数,如果这个参数不为对象,则直接转为对象,但是undefined和null不可以。

ES6入门之对象扩展的更多相关文章

  1. ES6入门——数值的扩展

    1.二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b或0B和0o或0O表示. 2.Number.isFinite(),Number.isNaN() ES6在Number对 ...

  2. ES6入门——正则的扩展

    1.RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况.第一种情况是参数是字符串,这时第二个参数表示正则表达式的修饰符:第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表 ...

  3. ES6入门——函数的扩展

    1.函数参数的默认值 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法.现在ES6可以为函数的参数添加默认值,简洁了许多. ES5 function show(a,b){ b = b ...

  4. ES6学习之对象扩展

    简介表示法(直接写入变量和函数,作为对象的属性和方法) let x = "test" let obj={ x, //属性名为变量名,属性值为变量值 y(){console.log( ...

  5. es6 语法 (对象扩展)

    { //简洁表示法 let o = 1; let k = 2; let es5 = { o:o, k:k }; let es6 = { o,k }; console.log(es5,es6); //1 ...

  6. ES6入门系列 ----- 对象的遍历

    工作中遍历对象是家常便饭了,遍历数组的方法五花八门, 然而很多小伙伴是不是和我之前一样只会用for ...in.... 来遍历对象呢, 今天给大家介绍五种遍历对象属性的方法: 1, 最常用的for  ...

  7. ES6入门教程---数值扩展和数组扩展

    1.数值扩展 var num = 0b11; console.log(num);3 var num = 0o11;console.log(num);9 var num = 1.234; console ...

  8. ES6对象扩展

    前面的话 随着JS应用复杂度的不断增加,开发者在程序中使用对象的数量也在持续增长,因此对象使用效率的提升就变得至关重要.ES6通过多种方式来加强对象的使用,通过简单的语法扩展,提供更多操作对象及与对象 ...

  9. es6之函数扩展与对象扩展

    一.函数扩展 1.参数默认值 参数有默认值,后面不可以再加没有默认值的变量.如以下test函数中,不可以加写成 function test(x,y="word",z){ } fun ...

随机推荐

  1. zookeeper 监听事件 NodeCacheListener

    zookeeper 监听事件 NodeCacheListener NodeCacheListener一次注册,每次监听,但是监听不到操作类型,不知道是增加?删除?还是修改? 1.测试类: packag ...

  2. python_threading模块实现多线程详解(转)

    综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ...

  3. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  4. Nginx 日志

    原文地址:Nginx深入详解之日志 作者:scq2099yt 一.日志分类        Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx ...

  5. 关于git pull时出现的问题及解决反思

    前因 在前面由于已经git过一次,按照娄老师的要求,代码一个一个commit,所以删掉之前的git仓库(用la查看,使用rm -rf .git删除).但远程origin已经存在,所以执行git rem ...

  6. 20145303刘俊谦 《Java程序设计》第2周学习总结

    20145303刘俊谦 <Java程序设计>第2周学习总结 教材学习内容总结 1.对于标识符的一些名称规范(觉得挺重要而且容易混淆!定义就不写了,列一些例子): 包名: xxxyyyzzz ...

  7. 团队项目系列博客 —— 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号)

    团队项目系列博客 -- 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号) 标签(空格分隔): wampserver php 参考:参考文献1.慕课网.知乎.github 一.w ...

  8. Android中C可执行程序编译问题

    make:进入目录'/opt/FriendlyARM/tiny4412/android/android-4.1.2'make: *** 没有规则可以创建“out/target/product/gene ...

  9. Jquery6 DOM 节点操作

    学习要点: 1.创建节点 2.插入节点 3.包裹节点 4.节点操作 DOM 中有一个非常重要的功能,就是节点模型,也就是 DOM 中的“M”.页面中的元素结构就是通过这种节点模型来互相对应着的,通过这 ...

  10. Spring笔记1——Spring起源及其核心技术

    Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...