Object

Object是一种引用数据类型,也是一个构造函数。

Object属性

1、Object.prototype

Object的原型。

Object原型处于原型链的顶端,是所有对象的原型。

2、Object.name

返回Object函数名。

Object方法

1、Object.assign()

将两个对象合并,并返回新的对象。

在产生冲突时,后者的属性会覆盖前者。

该方法属于浅拷贝。

var target={name: "failte", age: 18};

var source={sex: "man", age: 22};

var obj = Object.assign(target, source);

2、Object.create()

以对象原型,创建一个新对象。

第一个参数为原型对象,第二个参数为新描述符属性对象。

var obj = {
this.a="a";
this.b="b"
}; var nobj = Object.create(obj, {
name: {
value: 42,
writable: true,
enumerable: true,
configurable: true
}
});

3、Object.seal()

封装对象。封装后的对象无法增删属性,但可以修改属性。

可以通过Object.isSealed()方法判断对象是否被封装。

var obj = {a: 1};

Object.seal(obj);

obj.b = 'el';

delete obj.a;

console.log(obj);

4、Object.freeze()

冻结对象。被冻结的对象增删改属性。

返回和传入的参数是同一对象。

可以使用Object.isFrozen()方法判断对象是否被冻结。

var obj = {a: 1};

Object.freeze(obj);

obj.b = 2;

delete obj.a;

obj.a = 10;

console.log(obj);

5、Object.is()

判断两个对象是否相同。

比较两方为 undefined、null、true、false、相同字符串、同一对象、NaN、+0、0、-0、数字时,返回true,其他情况返回false。

var obj = {a: 1, b: 2};

console.log(Object.is(undefined, undefined));

console.log(Object.is(null, null));

console.log(Object.is(true, true));

console.log(Object.is(false, false));

console.log(Object.is('aaa', 'aaa'));

console.log(Object.is(obj, obj));

console.log(Object.is(NaN, NaN));

console.log(Object.is(-0, -0));

console.log(Object.is(+0, +0));

console.log(Object.is(0, 0));

console.log(Object.is(100, 100));

6、Object.preventExtensions()

限制对象不可扩展。

可以通过Object.isExtensible()判断对象是否被限制。

var obj = {a: 1, b: 2};

Object.preventExtensions(obj);

obj.c = 3;

console.log(obj);

7、Object.getOwnPropertyNames()

返回对象可以遍历的属性的键名数组。

ES6的简洁写法为:Object.keys(obj)

var obj = {a: 1, b: 2};

console.log(Object.keys(obj));

8、obj.hasOwnProperty()

判断对象是否存在属性

ES6简洁写法:key in obj

var obj = {a: 1, b: 2};

console.log(obj.hasOwnProperty('a')); // ES5

console.log('a' in obj); //ES6

9、Object.getOwnPropertyDescriptor()

查询对象属性的描述符。

var obj = {a: 1, b: 2};

console.log(Object.getOwnPropertyDescriptor(obj, 'a'));

10、Object.getOwnPropertyDescriptors()

查询对象的描述符。

var obj = {a: 1, b: 2};

console.log(Object.getOwnPropertyDescriptors(obj));

11、Object.getOwnPropertySymbols()

返回对象所有的Symbol值属性键名数组。

var obj = {a: 1, b: 2, [Symbol('a')]: 3};

console.log(Object.getOwnPropertySymbols(obj));

12、Object.defineProperties()

定义对象属性。

var obj = {};

Object.defineProperties(obj, "val", {
value: undefined, // 属性值,默认undefined
writable: false, // 是否可写,默认false
enumerable: false, // 是否可枚举,默认false
configurable: false, // 是否可配置,默认false
get: undefined, // 该属性的getter,默认undefined
set: undefined, // 该属性的setter,默认undefined
})

13、Object.values()

返回对象所有的属性值数组。

var obj = {a: 1, b: 2};

console.log(Object.values(obj));

14、Object.entries()

返回对象所有属性与属性值的键值对列表。

var obj = {a: 1, b: 2};

console.log(Object.entries(obj));

15、Object.fromEntries()

把键值对列表转换为一个对象。与Object.entries()方法相反。

var obj = {a: 1, b: 2};

var entries = Object.entries(obj);

console.log(Object.fromEntries(entries));

16、Object.getPrototypeOf()

获取对象的原型。相当于直接获取obj.prototype。

var obj = {a: 1, b: 2};

console.log(Object.getPrototypeOf(obj));

17、Object.setPrototypeOf()

设置对象的原型。相当于直接设置obj.prototype。

function Animal() {
this.a = 1;
this.b = 2;
} var obj = {}; Object.setPrototypeOf(obj, new Animal()); console.log(obj.a);

18、Object.toString()

原型方法

1、apply()

可以修改this的指向,执行并返回改变指向后的函数的运行结果。

原函数的传参以数组的方式传入。

2、arguments

返回当前函数的实参列表。

get/set

3、bind()

可以修改this的指向,返回改变指向后的函数。

4、call()

可以修改this的指向,执行并返回改变指向后的函数的运行结果。

原函数的传参以多个参数的的方式传入。

get/set

5、caller()

返回函数的调用环境。

6、constructor()

返回当前对象的构造函数。

7、length

返回当前函数的形参个数。

8、name

返回当前对象的名称。

9、toString()

返回当前对象的字符串形式。

10、Symbol.hasInstance

判断某对象是否为某构造器的实例。

用它自定义instanceof操作符在某个类上的行为。

获取Function原型的instanceof对应的方法

var func = () => {};
var obj = {};
var log1 = Function[Symbol.hasInstance](func, Function);
var log2 = Object[Symbol.hasInstance](obj, Object);
console.log(log1, log2)

自定义类,并重写instanceof方法

class My {
[Symbol.hasInstance](instance) {
console.log(instance)
return true;
}
constructor() {
this.a=1
}
}
var my = new My()
console.log(my instanceof My)

看不懂源码?先来恶补一波Object原型吧的更多相关文章

  1. 学不懂Netty?看不懂源码?不存在的,这篇文章手把手带你阅读Netty源码!

    阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...

  2. 还看不懂同事代码?快来补一波 Java 7 语法特性

    前言 Java 平台自出现到目前为止,已经 20 多个年头了,这 20 多年间 Java 也一直作为最流行的程序设计语言之一,不断面临着其他新兴编程语言的挑战与冲击.Java 语言是一种静态强类型语言 ...

  3. 一点一点看JDK源码(〇)

    一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...

  4. 一点一点看JDK源码(三)java.util.ArrayList 前偏

    一点一点看JDK源码(三)java.util.ArrayList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 ArrayLi ...

  5. 【实习记】2014-08-15文档太少看着源码用cgicc+stl库之模板谓词函数对象

        总结1: 今天找到了昨天scanf的问题答案,scanf与printf一样的神奇而复杂,稍不留神,就会被坑.scanf函数在读入非空白符分割的多个字符串的解决方法是这个:/* 以 | 分割 * ...

  6. 边看MHA源码边学Perl语言之一开篇

    边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...

  7. 带着萌新看springboot源码8(spring ioc源码 完)

    上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...

  8. 一点一点看JDK源码(一)Collection体系概览

    一点一点看JDK源码(一)Collection体系概览 liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 Collection为集 ...

  9. 一点一点看JDK源码(二)java.util.List

    一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表, ...

随机推荐

  1. squid代理与缓存(上)

    squid代理与缓存(上) 1. Squid介绍 1.1 缓存服务器介绍 缓存服务器(英文意思cache server),即用来存储(介质为内存及硬盘)用户访问的网页,图片,文件等等信息的专用服务器. ...

  2. python常用函数 J

    (1)join(iterable)/(2) join(str, str) (1)join()连接字符串数组.(2)os.path.join()将多个路径组合后返回. 例子:

  3. Codeforces 735E 树形DP

    题意:给你一棵树,你需要在这棵树上选择一些点染成黑色,要求染色之后树中任意节点到离它最近的黑色节点的距离不超过m,问满足这种条件的染色方案有多少种? 思路:设dp[x][i]为以x为根的子树中,离x点 ...

  4. gcc开启C99或C11标准支持

    开启C99支持 gcc -std=c99 forc99.c 开启C11支持 gcc -std=c1x forc11.c 或 gcc -std=c11 forc11.c

  5. Halo(十一)

    Spring Boot 继承 AbstractErrorController 实现全局异常处理 @RequestMapping("${server.error.path:${error.pa ...

  6. 天池平台再升级,打造产业AI知识共享、技术共享平台

    在5月23日的云栖大会·武汉峰会上,天池发布“全球AI开发者计划”,打造一站式人工智能知识共享平台,计划2年内在平台上集聚30万AI工程师.同时,阿里云天池正式升级,成为从产业机会到实施交付一站式解决 ...

  7. pyCharm和解释器下载安装

    参考:(mac) 安装流程和注意: http://blog.csdn.net/limin2928/article/details/69267184 解释器下载地址: https://www.pytho ...

  8. JS中的setTimeout()函数

    1.setTimeout() 方法 setTimeout() 方法用于在指定的毫秒数后调用函数或执行表达式.返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行. s ...

  9. HDU 6038 Function —— 2017 Multi-University Training 1

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total ...

  10. docker镜像加速遇见的一个问题

    今天运行docker发现了一个问题,运行docker images会报 Cannot connect to the Docker daemon at unix:///var/run/docker.so ...