在express.js里  我们看到这样的代码:

顾名思义,我们知道是将proto,EventEmitter.prototype 上的属性复制一份给app上。

那它具体实现的原理是怎么样的?

 'use strict'

 /**
* Module exports.
* @public
*/ module.exports = merge /**
* Module variables.
* @private
*/ var hasOwnProperty = Object.prototype.hasOwnProperty /**
* Merge the property descriptors of `src` into `dest`
*
* @param {object} dest Object to add descriptors to
* @param {object} src Object to clone descriptors from
* @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties
* @returns {object} Reference to dest
* @public
*/ function merge(dest, src, redefine) { //dest和src 必须传
if (!dest) {
throw new TypeError('argument dest is required')
} if (!src) {
throw new TypeError('argument src is required')
} //不传默认是true
if (redefine === undefined) { redefine = true
} //遍历src本身所有的属性。不包括它原型上的。
//为什么是所有的。Object.keys() , for....in 都是枚举可枚举的属性
//而Object.getOwnPropertyNames不管可不可枚举都可以取出来 Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { //如果传过来的redefine是true,不管你这个对象本身有没有已经定义这个属性
//都会覆盖! //如果是false,没有才加上!
//而且是原原本本的复制,他会取出描述器,一模一样加上! if (!redefine && hasOwnProperty.call(dest, name)) {
// Skip desriptor
return
} // Copy descriptor
var descriptor = Object.getOwnPropertyDescriptor(src, name)
Object.defineProperty(dest, name, descriptor)
}) return dest
}

最新文章

  1. 从Eclipse迁移到Android Studio碰到的问题记录
  2. JavaScript 表单验证
  3. ABP框架详解(二)AbpKernelModule
  4. tcp protocol number
  5. destroy-method="close"的作用
  6. BIOS 深入学习 转
  7. SAP HANA SLT 将Oracle表 数据同步到HANA数据库
  8. CSS超链接-光标-缩放
  9. PhpStrom如何安装主题?(总结三种不同格式安装方法)
  10. fitnesse - Variables and Symbols
  11. C#进行回文检测,判断字符串是否是回文的代码
  12. pyspider环境部署2--pyspider安装
  13. java总结:Java中获取系统时间(年、月、日)以及下拉菜单默认选择系统年、月、日的方法
  14. PHP-循环结构-数组
  15. mongoDB的使用(NodeJs)
  16. 数据连接工具DbVisualizer的使用
  17. Adroid我还是个菜鸟——导入jar包
  18. Java如何使用线程异常?
  19. windows从0开始学golang--0--安装golang+git+自己写包
  20. notify notifyAll 死锁

热门文章

  1. awk之基本信息
  2. django中使用json.dumps处理数据时,在前台遇到字符转义的问题
  3. STM32之------独立看门狗(IWDG)和窗体看门狗(WWDG)
  4. NFC应用(二)读写器模式
  5. X windows的底层实现机制
  6. setAdapter(adapter)空指针nullPointer 解决办法
  7. Android 匿名共享内存Java接口分析
  8. android连续点击两次返回键退出代码
  9. ubuntu查看硬件信息
  10. 学习linux之vi编辑器