手写 new
2024-10-07 00:42:10
/*
基于内置的 new 关键词,我们可以创建 Dog 的一个实例 zhangsan ,实例可以调用原型上的属性和方法
需求:自己实现一个 _new 方法,也可以模拟出内置 new 后的结果
*/
/*
let zhangsan = new Dog('张三');
1、像普通函数执行一样,形成一个私有的作用域
形参赋值
变量提升
2、默认创建一个对象,让函数中的 this 执行这个对象,这个对象就是当前类的一个实例
3、代码执行
4、默认把创建的对象返回
*/
function Dog(name) {
this.name = name;
}
Dog.prototype.bark = function () {
console.log('hello!');
}
Dog.prototype.sayName = function () {
console.log('my name is ' + this.name);
}
// => Fn 当前要 new 的类 =>Dog
// => arg 后期需要给构造函数传递的参数信息 =>['张三']
function _new(Fn, ...arg) {
// => 创建一个空对象,让他的原型链指向 Fn.prototype (作为 Fn 的一个实例)
// => Object.create([AA对象]) -> 创建一个空对象 obj ,并且让空对象 obj 作为 AA对象 所属构造函数的实例(obj.__proto__=AA)
// let obj = {};
// obj.__proto__ = Fn.prototype;
let obj = Object.create(Fn.prototype);
Fn.call(obj, ...arg);
return obj;
}
let zhangsan = _new(Dog, '张三');
zhangsan.bark();
zhangsan.sayName();
console.log(zhangsan instanceof Dog);
最新文章
- three.js全景
- Linux 进程间通讯详解五
- xbmc的静态链接办法
- 升级openssl
- OpenJudge计算概论-最长平台
- Android USB Host与HID通讯 (一)
- nginx 采用https 协议通信配置
- C语言学习之递归
- javascript 获取字符递增
- Java中的包装数据类型
- 51nod1347 旋转字符串
- DXT 图片压缩(DXTC/DirectX Texture Compression Overview)
- [转]MySQL导入.sql文件及常用命令
- Docker私有镜像仓库
- 数据库事务(Database Transaction)
- 理解数据结构Priority Queue
- Internet History, Technology and Security (Week 5-1)
- 使用Android Ant在编译时混淆
- Linux下hosts、host.conf、resolv.conf的区别
- 【Java面试题】54 去掉一个Vector集合中重复的元素
热门文章
- matlab基础知识总结
- 08_CSS入门和高级技巧(6)
- Leetcode_45. 跳跃游戏 II
- Selenium + Python + Chrome 自动化测试 环境搭建
- java经典问题 byte b=1、b=b+1、b+=1
- 「雕爷学编程」Arduino动手做(20)—水银开关模块
- react+express实现跨域
- promise对象里resolve和reject状态讲解及Promise.all()的使用
- [Asp.Net Core] Blazor WebAssembly - 工程向 - 如何在欢迎页面里, 预先加载wasm所需的文件
- php连接数据库 需要下载adodb