目录 (づ ̄ 3 ̄)づ=>
[TOC]
---
>[info] ## Object.assign(target,obj1,obj2);
以上方法为浅复制
>[info] ## Object.create(proto,propertiesObject);
create方法返回一个新对象,这个新对象的prototype为create方法的第一个参数。
create方法的第二个参数是对返回的这个新对象的属性一些描述配置,可设置可读可枚举神马的
>[warning] **详见:** [属性描述符](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)
```
//继承
Child.prototype = Object.create(Parent.prototype) //实现是类似于下面的create方法
function create(proto){
function Fn(){}
Fn.prototype = proto;
return new Fn();
}
```
**注意:** 此方法并没有顺道改变prototype中的constructor属性,导致继承对象的constructor指向的是被继承对象的构造函数,需要修正
>[info] ## Object.setPrototypeOf(obj,newPrototype);
**推荐的继承方法,因为不会误改prototype中的constructor**
```
Child.prototype.__proto__ = Parent.prototype;
//和Object.setPrototypeOf(Child,Parent.prototype)等效
```
![](https://box.kancloud.cn/a601587e2e4508398753eb950ef28050_362x201.png)
**__proto__**指向大的是new出该对象的构造函数下的原型
![](https://box.kancloud.cn/b653a8c080a3e6c5f9ae849e60417fef_650x322.png)
>[danger] function是Function的原型,它的情况比较特殊,一般的原型都应为Object类型而它是function,且Function的原型链指向的是function,这意味着什么呢?一般情况下,一个对象下的原型链指向的是new出这个对象的构造函数下的原型,function是Function下的原型,这意味着Function自己new出了自己,换句话说Function就到头了!但是,function却还可查,它的原型链指向Object 意味着是 function Object new出来的。然而这个function Object的原型链指向的确是function!!
**故源头两个一个Function构造函数对象,一个Object原型对象**
![](https://box.kancloud.cn/4ba9240ccdc73511030e03c3efe8f882_539x627.png)
>[info] ## Object.prototype.toString;
**多用来精确判断一个数据类型**
- Object.prototype.toString.call([])==='[object Array]'
- Object.prototype.toString.call('')==='[object String]'
- Object.prototype.toString.call({})==='[object Object]'
**注意:**
object的tostring追述到Object对象下原型的方法。
而其它系统对象,例如数组的tostring方法追述到数组对象下的tostring方法。
另外调用系统对象下的,例如[].tostring,输出是数组中的数组成员串起来的一串字符串,''.tostring就是本身那串字符串,而{}.tostring因为调用的是原型链上Object.prototype.tostring,故输出为'[object Object]'。
>[info] ## Object.keys();
如果是一个数组,则返回数组索引的集合;
如果是一个对象,则返回对象键名的集合。
>[info] ## NodeJS中的inherit
```
let util = require('util');
let EventEmitter = require('events');
util.inherits(Child,EventEmitter)
//上面的继承等于// console.log(Child.prototype.__proto__===EventEmitter.prototype) //true
let c = new Child();
c.on('a',function(){
console.log(this===c); //true //this调用正常
})
c.emit('a')
```