前端面试之js总结之new操作符

前言

之前在复习的时候,经常使用的new忽然感觉到错愕,不适应,今天查了资料,自己简单实现了一下。

new命令的作用

function Person(name){
    console.log(this);
    this.name=name;
}
var child=new Person;
child instanceof Person;

由上面的代码可知道new操作符绑定了Person内部this关键字,执行了Person内部的代码,返回了一个对象。

new命令的原理

1.创建一个空对象,作为将要返回的对象实例。
2.将这个空对象的原型,指向构造函数的prototype属性。
3.将这个空对象赋值给函数内部的this关键字。
4.开始执行内部的代码。

new的简易实现

注意下面这种行为。

function Person(){
    return {"cc":"20"}
}
var child=new Person();//{cc:"20"}
function Person(){
    return null
}
var child=new Person();

根据上面的行为实现new操作符

function _new(constructor,params){
    var args=[].slice.call(arguments);//把arguments对象转为数组
    var constructor=args.shift();//取出构造函数
    var context=Object.create(constructor.prototype);//创建新的对象,并把对象的原型指向构造函数的原型对象
    var result=constructor.apply(context,args);//绑定this
    return (typeof result==='object'&&result!=null)?result:context;//返回对象
}
var actor=_new(Person,'cc',20);

资料来源

资料来源:构造函数与 new 命令
红宝书(第三版)

最后

Github求一波star

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,911评论 1 45
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,732评论 0 11
  • 一、 JS面向对象编程 1、 面向对象介绍 什么是对象? Everything is object (万物皆对象)...
    宠辱不惊丶岁月静好阅读 853评论 0 2
  • 在小溪出生前 我一直都觉得自己是个长不大需要被宠被关爱的小孩儿 看着日渐隆起的肚子 我的内心是有许多不安的 无数次...
    梁乐天阅读 500评论 0 0
  • 早上起来看到微信上L和J都上传了去西藏游览的照片。L是工作中遇到的一个男生属狗,而我似乎天生和属狗的人非常有缘,不...
    日华叶子阅读 468评论 0 1