一文带你看懂JS中的new

前言

有一说一,当你对原型掌握的懵懵懂懂,却又妄图掌握的清清楚楚的时候,你会发现即使一个new操作符,你都不是那么明白。

开门见山

直接贴例子了:

function Test(name) {
  this.name = name;
  let nick = name;
  return nick;
}
Test.prototype.sayName = function () {
    console.log(this.name)
}
const a = new Test('a')
const b = Test('b')

这段吧,其实也好懂,new 通过构造函数 Test 创建出来的实例可以访问到构造函数中的属性,但仅仅是实例属性,像是私有属性如nick,new出来的新的对象是没有办法访问到的。new 通过构造函数 Test 创建出来的实例可以访问到构造函数原型链中的属性,也就是说通过 new 操作符,实例与构造函数通过原型链连接了起来。

而关于b我就不用过多解释了。

但是如果返回值是一个对象:

function Test(name) {
  this.name = name;
  let nick = name;
  return {nick: name};
}

我们使用new得到的即是:

{nick:'bb'}

一个题目

function F() {
  this.a = 1
  this.f = function() {
    this.a = 3
  }
}

F.f = function() {
  this.a = 2
}

var r = new F.f()

那么r会是什么呢?

这里就涉及到了运算符的优先级的问题,在这个题目中,F.f是最高优先级,所以最后得到的结果是:

{a:2}
发布了346 篇原创文章 · 获赞 330 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43870742/article/details/104008540