new做了些什么?

function People(name, age){
this.name = name;
this.age = age;
}; var xiaoming = new People();

要创建 People 的新实例,必须使用 new 操作符。以这种方式调用构造函数实际上会经历以下 4

个步骤:

  1. 创建一个新对象;
  2. 将this 就指向了这个新对象;(同时还继承了该函数的原型) -- 将新对象 __ proto __ 指向 构造函数 prototype;
  3. 执行构造函数中的代码(为这个新对象添加属性);
  4. 返回新对象。
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
}

最新文章

  1. CodingLife主题更新
  2. observejs改善组件编程体验
  3. CSS3 justify 文本两端对齐
  4. laravel的学习感受
  5. Python全栈开发day7
  6. 淘宝(阿里百川)手机客户端开发日记第三篇 SlidingPaneLayout实现侧滑菜单
  7. QQ群聊天记录文件分割
  8. js模块化开发
  9. Learning WCF Chapter1 Creating a New Service from Scratch
  10. js实现键盘操作对div的移动或改变-------Day43
  11. 线性表的Java实现
  12. 通过原生js的ajax或jquery的ajax获取服务器的时间
  13. javascript笔记整理(运算符 )
  14. NPAPI简介
  15. Entity Framework Core 执行SQL语句和存储过程
  16. java集合系列——List集合之Vector介绍(四)
  17. 仿今日头条app手机端顶部触屏滑动导航
  18. mysql 开发基础系列21 事务控制和锁定语句(下)
  19. 安卓开发-设置RadioButton的点击效果
  20. tcp/ip 数据进入协议栈时的封装及分用过程图

热门文章

  1. smbcontrol - 向smbd或nmbd进程发送消息
  2. Java代码乱象!
  3. Sass-@while
  4. Vue:子组件如何跟父组件通信
  5. Altium Designer 19 单层显示
  6. Java实现线程的两种方式?Thread类实现了Runnable接口吗?
  7. gulp为css,js添加版本号
  8. orcad原理图与PSPICE模型库名称
  9. vue打包配置发布路径
  10. Bugku | 入门逆向