NOW,今天让我们来实现一个extend函数。

具体思路: 使用Object.defineProperty()对属性的特性进行设置,然后通过Object.getOwnPropertyDescriptor()获取到属性描述符,并赋值给新创建的对象

下面我们把代码拉出来溜溜

    Object.defineProperty(Object.prototype,
"extend",
{
writable: true,
enumerable: false,
configurable: true,
value: function(o){
// 获取所有的自有属性
var names = Object.getOwnPropertyNames(o);
for(var i =0;i< names.length;i++){
// 如果属性已存在则跳过
if(names[i] in this) continue;
// 获取该属性的属性描述符ss
var desc = Object.getOwnPropertyDescriptor(o,names[i]);
Object.defineProperty(this,names[i],desc)
}
}
}
)

使用示例:

  // 定义一个新对象
var a = {
itemA: 1
}
// 新建一个属性,并设置属性描述符
Object.defineProperty(a,"itemB",{
writable: true,
enumerable: false,
configurable: true,
value: 2
})
// 再定义一个新对象
var b = {}
b.extend(a)
// 此时我们可以看到静态属性已经继承过去了
console.log(b) // 结果为{itemA: 1,itemB: 2}
//再来看看属性描述符是不是也过去了
let extendDesc = Object.getOwnPropertyDescriptor(b,"itemB")
console.log(extendDesc) // 结果为{value: 2, writable: true, enumerable: false, configurable: true}

好了,结束,有机会我们一起来模拟实现一下Object.create()函数

 

最新文章

  1. ASP.NET Core 中文文档 第三章 原理(3)静态文件处理
  2. Kafka入门学习(一)
  3. makefile实例(3)-多个文件实例优化
  4. 深入理解计算机系统第二版习题解答CSAPP 2.19
  5. xapian搜索系统存储结构解读
  6. 如何获取drawable目录下的图片绝对路径
  7. JavaEE Tutorials (23) - 资源适配器和契约
  8. js——cookie
  9. bzoj 2141 : 排队 分块
  10. How to solve java.net.SocketTimeoutException:60000millis problem in HDFS
  11. linux下libreoffice安装测试
  12. [TJOI 2016&amp;HEOI 2016]求和
  13. stm32WB55xx 外设资源
  14. vue and jest测试
  15. python 网络编程粘包解决方案2 + ftp上传 + socketserver
  16. 怎么样使用CLion调试分析MySQL Server
  17. 多线程this逃逸
  18. hishlib 算法加密
  19. [3]windows内核情景分析--内存管理
  20. ADF_Starting系列3_使用ADF开发富Web应用程序之开发User Interface

热门文章

  1. memcached中hash表相关操作
  2. (三十)c#Winform自定义控件-文本框(三)
  3. C#.Net实现AutoCAD块属性提取
  4. loging日志的使用
  5. 用友网络科技Java高级开发面试题(2019)
  6. 思科根据键值获取OID方法
  7. numba,让python速度提升百倍
  8. c语言推箱子 扫雷项目
  9. Scrapy框架解读
  10. HTML的发展及认识