多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
目录 (づ ̄ 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') ```