new做了些什么?
2024-09-06 02:53:05
new做了些什么?
function People(name, age){
this.name = name;
this.age = age;
};
var xiaoming = new People();
要创建 People 的新实例,必须使用 new 操作符。以这种方式调用构造函数实际上会经历以下 4
个步骤:
- 创建一个新对象;
- 将this 就指向了这个新对象;(同时还继承了该函数的原型) -- 将新对象 __ proto __ 指向 构造函数 prototype;
- 执行构造函数中的代码(为这个新对象添加属性);
- 返回新对象。
1. var obj = {};
2. obj.__proto__ = People.prototype;
People.call(obj);
3. People();
4. teturn obj;
手写实现New
function myNew() {
// 创建一个空的对象
let obj = new Object()
// 获得构造函数(即arguments[0])
let Con = [].shift.call(arguments) //获取第一个参数,shift()直接修改原数组
// 链接到原型
obj.__proto__ = Con.prototype
// 绑定 this,执行构造函数
let result = Con.apply(obj, arguments)
// 确保 new 出来的是个对象
return typeof result === 'object' ? result : obj
}
最新文章
- CodingLife主题更新
- observejs改善组件编程体验
- CSS3 justify 文本两端对齐
- laravel的学习感受
- Python全栈开发day7
- 淘宝(阿里百川)手机客户端开发日记第三篇 SlidingPaneLayout实现侧滑菜单
- QQ群聊天记录文件分割
- js模块化开发
- Learning WCF Chapter1 Creating a New Service from Scratch
- js实现键盘操作对div的移动或改变-------Day43
- 线性表的Java实现
- 通过原生js的ajax或jquery的ajax获取服务器的时间
- javascript笔记整理(运算符 )
- NPAPI简介
- Entity Framework Core 执行SQL语句和存储过程
- java集合系列——List集合之Vector介绍(四)
- 仿今日头条app手机端顶部触屏滑动导航
- mysql 开发基础系列21 事务控制和锁定语句(下)
- 安卓开发-设置RadioButton的点击效果
- tcp/ip 数据进入协议栈时的封装及分用过程图