旺球体育在线面试之new操作符具体都干了什么?

时间:?2021-10-18阅读:?16标签:?new

new操作符具体都干了什么?

(1) 首先创建了一个空对象。

(2) 设置原型,将对象的原型设置为函数的prototype对象。

(3) 让函数的this指向这个对象,执行构造函数中的代码

(4) 判断函数的返回值类型,如果是值类型,则返回创建的对象,如果是引用类型,则返回这个引用类型的对象。

实现一下?

function objectFactory(){
  let newObject = null,
  construct = Array.prototype.shift.call(anguments),
  result = null

  // 参数判断
  if(typeof construct !== 'function'){
      console.error('type error')
      return
  }

  // 新建一个空对象,对象的原型为构造函数的prototype对象
  newObject = Object.create(construct.prototype)
  // 将this 指向这个新建对象,并执行
  result = construct.apply(newObject,arguments)

  // 判断返回对象
  if flag = result && (typeof result === 'object' || typeof result === 'boolean')
  return flag ? result : newObject
}

判断返回值类型?

?对于返回值来讲,当构造函数返回的是基本数据类型,那么此时返回的结果是我们所创建的对象newObject,当构造函数返回的是引用类型object || function时,返回的是result值,此时通过apply函数又重新绑定了this指向,也就是说构造函数返回的是什么引用类型的值,当前返回值类型就是什么。
?具体代码可见:

// 构造函数返回引用数据类型Object
let foo = objectFactory([function Foo(){ this.name = 'name'; return new Object("name") },1])
console.log(foo,"--------")  // [String: 'name'] --------
// 当构造函数返回值为Object("name"),所以返回值此时返回result,程序又通过apply改变了this的指向,指向了构造函数的返回值Object('name'),所以此时使用new操作符的返回值为引用数据类型[String: 'name']

// 构造函数返回基本数据类型String
let foo = objectFactory([function Foo(){ this.name = 'name'; return 'sss' },1])
console.log(foo,"--------")  // Foo { name: 'name' } --------
// 当构造函数返回值为字符串,所以此时返回newObject,则此时的返回值为Foo

来自:https://segmentfault.com/a/1190000040823916


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.pannellisolari.net/article/detial/10741

new 操作符 做了什么?

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。假设Test是一个构造函数,通常在创建对象的实例时,要使用new,eg:test = new Test() , 那么在调用new的时候,发生了什么呢?

Js中的new原理及其实现

上面的代码我们直接运行了Person方法,发现此时打印的是window对象,原因是函数在调用的时候函数的this指向window,下面我们看一下通过new Person()运行的结果如何

JS深度解析 new 原理及模拟实现

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 ——(来自于MDN)new 创建的实例有以下 2 个特性:1,访问到构造函数里的属性;2,访问到原型里的属性

JS中NEW的实现原理及重写

上面的代码,我们首先创建了一个函数,如果是用面向对象的说法就是创建了一个Function类的实例,如果直接执行这个函数,那它就是一个普通的函数,如果用new执行,则这个函数被称为一个自定义的类。

JS的new关键字都干了什么?

new关键字在实例化获取对象时都做了什么?是一道经常出现在旺球体育在线面试时的问题。如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的。更深入的层级发生了什么呢?同时面试官想从这道题里面考察什么呢?

如何自己实现 JavaScript 的 new 操作符?

new 大家肯定都不陌生,单身没有对象的时候就 new 一个,很方便。那么它在创建实例的时候,具体做了哪些操作呢?今天我们就来一起分析一下。

深入理解JavaScript之 new 原理及模拟实现

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例,先看看 new 实现了哪些功能, 先来看一段代码:

深入理解new运算符

在 JavaScript 中,new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。创建一个对象很简单,为什么我们还要多此一举使用 new 运算符呢?它到底有什么样的魔力?

“写”一个js的new运算符

new 运算符 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。比较好奇new运算符的原理,了解了下,分享给大家。自己写一个New()方法,

JS中的new操作符原理解析

1. 创建一个类的实例:创建一个空对象obj,然后把这个空对象的__proto__设置为Person.prototype(即构造函数的prototype);2. 初始化实例:构造函数Person被传入参数并调用,关键字this被设定指向该实例obj;3. 返回实例obj。

点击更多...

内容以共享,参考,研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

Baidu