Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

    • Vue

    • 计算机网络

    • CSS

    • JavaScript

      • JavaScript-闭包
      • JavaScript-原型链
      • JavaScript-new操作符具体做了什么?
        • 实例
      • JavaScript-浅拷贝和深拷贝
      • JavaScript-微服务和宏服务
      • JavaScript-Promise
      • JavaScript-find和filter区别
      • JavaScript-some和every区别
      • JavaScript-垃圾回收机制
      • 常见面试题
    • 小程序

    • 面试记录

  • JavaScript

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • 前端面试题
  • JavaScript
HiuZing
2022-04-02
目录

JavaScript-new操作符具体做了什么?

# new操作符具体做了什么?

  1. 创建了一个空的对象
function Foo(){
    
}
console.log( new Foo())//Foo {}
1
2
3
4
  1. 将空对象的原型,指向于构造函数的原型
function Foo(){
    
}
console.log(Foo.prototype == new Foo().__proto__)//true
1
2
3
4
  1. 将空对象作为构造函数的上下文(改变this指向)
function Foo(){
    console.log(this)//Foo {}
    this.name = '张三'
}
console.log( new Foo())//Foo { name: '张三' }
1
2
3
4
5
function Foo(){
    console.log(this) //window
    this.name = '张三'
}
console.log( Foo())//undefined
1
2
3
4
5
  1. 对构造函数有返回值的处理判断

    • 返回的是基本类型 --> 忽略返回值

      function Foo(){
          this.name = '张三'
          return 1111
      }
      console.log( new Foo())//Foo { name: '张三' }
      
      1
      2
      3
      4
      5
    • 返回的是引用类型 --> 则使用return返回的

      function Foo(){
          this.name = '张三'
          return {}
      }
      console.log( new Foo())//{}
      
      1
      2
      3
      4
      5
      function Foo(){
          this.name = '张三'
          return [1,2,3]
      }
      console.log( new Foo())//[1,2,3]
      
      1
      2
      3
      4
      5

# 实例

function Fun(age,name){
    this.age = age
    this.name = name
    return 111
}

function create(fn,...args){
    //1.创建了一个空的对象
    var obj = {}
    //2.将空对象的原型,指向于构造函数的原型
    Object.setPrototypeOf(obj,fn.prototype)
    //3.将空对象作为构造函数的上下文(改变this指向)
    var result = fn.apply(obj,args)
    //4.对构造函数有返回值的处理判断
    return result instanceof Object ? result : obj
}

console.log(create(Fun,18,'张三'))//Fun { age: 18, name: '张三' }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 2024/08/14, 04:14:33
JavaScript-原型链
JavaScript-浅拷贝和深拷贝

← JavaScript-原型链 JavaScript-浅拷贝和深拷贝→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式