美文网首页
new 函数做了什么?

new 函数做了什么?

作者: 白羊座的泰迪 | 来源:发表于2022-01-06 17:44 被阅读0次

前言

最近看到一个MS题:在实例化对象时,new函数做了什么事情?

function Person(){ //构造函数Person
  ...
}

var xiaoming = new Person();//xiaoming是实例化的对象

开始我是一阵恍惚,new不就是实例化出构造函数(或者类)的一个对象吗?还能做什么?后来仔细审题,发现人家就是在问new在实例化的时候到底做了什么工作,于是问题变成了:实例化对象过程发生了什么?是怎样实现的?

1 实例化对象过程发生了什么?

首先我们倒着考虑下,通过new实例化得到的对象到底是个什么东西,从而分析new函数做了什么?

  • 对象是一个对象(Object),看似废话,却是关键的事实;
  • 对象继承了构造函数的原型链;
  • 对象拥有构造函数(类)的所有方法和属性

以上就是new出来的对象所具有的特性,接下来需要做的就是怎样让对象具有以上特性

2 怎样实现实例化?

我们就以构造函数为例~类的实现大同小异~

  • 创建一个对象-因为首先要有一个对象
var xiaoming = {};
  • 继承原型链:将对象的原型指向构造函数的原型:
function Person(name, age){ //目标构造函数Person
  this.name = name;
  this.age = age;
}
Person.prototype.say = function () {
   console.log(`我的名字叫${this.name}, 年龄${this.age}`)
}

xiaoming.__proto__ = Person. prototype;
  • 绑定构造函数上下文的方法和属性:

通过apply方法改变this的指向,执行构造函数Person,将所有属性绑定在对象(xiaoming)上

Person.apply(xiaoming, ['小明', 18])

3 demo函数总结

上边我们分步实现了实例化对象的过程,下边通过一个函数整体简单复写new方法

/*
* f为传入的构造函数,
* arg为传入的参数
*/
function new_demo (f, ...arg){  
  var obj = {};
  obj.__proto__ = f.prototype;
  f.apply(obj, arg);
  return obj;
}

通过new_demo函数实例化对象:

var xiaohong = new_demo(Person, '小红', 18);
xiaohong.say();//我的名字叫小红, 年龄18

总结

以上整个实现new方法的过程,就交代了new函数在实例化的过程中做了什么。简单来说,就是三步:创建对象、重置原型链指向、绑定构造函数上下文属性和方法

相关文章

  • new 函数做了什么?

    前言 最近看到一个MS题:在实例化对象时,new函数做了什么事情? 开始我是一阵恍惚,new不就是实例化出构造函数...

  • new操作符原理及实现

    [toc] 分析:new做了什么 new操作符通过执行自定义构造函数或者js内置构造函数,从而生成一个实例对象。 ...

  • new做了什么

    如果不使用new 使用new创建 总结new做了下面的事情(1) 创建一个新对象;(2) 将构造函数的作用域赋给新...

  • new()做了什么

    js new到底干了什么,new的意义是什么? 一、学过JS的都知道 创建对象可以这样 用内置的函数对象来构造对象...

  • new 关键字模拟实现

    首先,new 是JavaScript用来实例化一个对象的关键字,后边跟着构造函数,例如: 那么,new究竟做了什么...

  • JS中的new做了什么

    用构造函数创建对象,new做了4步:

  • 面向对象

    如下代码中, new 一个函数本质上做了什么? 1.执行 new Modal()1.1创建一个空对象 {},假设名...

  • new到底做了什么

    在Javscript中,我们实例化一个类的时候都会使用类似的代码 那么在new的时候,new到底做了什么呢,其实很...

  • new Vue() 做了什么?

    new Vue() 做了什么? src\core\instance\index.js 简单明了:执行了this._...

  • js new做了什么

    转载自 https://www.cnblogs.com/liveoutfun/p/8735992.html var...

网友评论

      本文标题:new 函数做了什么?

      本文链接:https://www.haomeiwen.com/subject/wocrcrtx.html