美文网首页
一个函数是否被new有啥区别?

一个函数是否被new有啥区别?

作者: percykuang | 来源:发表于2019-12-17 14:48 被阅读0次
function Person(name, age) {
  this.name = name
  this.age = age
}

new Person('Flinn', 20)
// 在函数体里面实际会发生如下操作:
// var this = {}
// this.name = name
// this.age = age
// return undefined (被忽略)
// return this

Person('King', 22)
// 在函数体里面实际会发生如下操作:
// this.name = name (浏览器下,函数在window上下文被调用,所以this为window,所以window.name = 'King')
// this.age = age   (浏览器下,函数在window上下文被调用,所以this为window,所以window.age = 22)
// return undefined

但是要注意:

  • 如果一个函数的返回值是引用类型(数组,对象或者函数)的数据,那么这个函数作为构造函数用new运算符执行构造时,运算的结果将被它的返回值取代,这时候,构造函数体内的this值丢失了,取而代之的是被返回的对象。

  • 如果一个函数的返回值是一个值类型,那么这个函数作为构造函数用new运算符执行构造时,它的返回值将被丢弃。new 表达式的结果仍然是this所引用的对象。

相关文章

  • 一个函数是否被new有啥区别?

    但是要注意: 如果一个函数的返回值是引用类型(数组,对象或者函数)的数据,那么这个函数作为构造函数用new运算符执...

  • js面向对象编程概述

    问:在js里面被 new 之后的函数和普通的函数有何区别吗? 1. New命令# 1.1 基本用法 new 命令的...

  • new.target

    new.target属性允许检测函数或构造方法是否是通过new运算符被调用的。通过new运算符被初始化的函数或构造...

  • Golang中make与new有何区别?

    Golang中make与new有何区别? 一、前言 本文主要给大家介绍了Go语言中函数new与make的使用和区别...

  • 普通函数和构造函数

    一、区别: 例如 调用 function test() { } 构造函数 : new test( ) 用new关...

  • new函数() 和 普通函数() 的区别

    区别:1、new执行的函数,函数内部默认生成了一个对象2、函数内部的this默认指向了这个new生成的对象3、ne...

  • 5分钟搞定new

    5分钟搞定new new一个函数到底干了啥? 在JS中,当new一个函数后,JS编译器将会做以下四件事情 创建一个...

  • co库之如何将generator函数转化成类async函数

    让我们来想想generator函数和async有啥区别?唯一的区别是async函数会自动执行,而generator...

  • 【js致死点】函数

    函数定义有两种方式 函数声明和函数表达式(new function 不考虑) , 两者的区别就是: 用函数声明创建...

  • JS基础核心之原型

    构造函数与实例 构造函数与普通函数的唯一区别:调用方式的不同,构造函数用new调用。 new的内部经历了什么? 创...

网友评论

      本文标题:一个函数是否被new有啥区别?

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