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