javascript中new关键字

简介: new 关键字在JavaScript中使用构造函数的时候,我们就会用到new关键字。

new 关键字

在JavaScript中使用构造函数的时候,我们就会用到new关键字。

定义:

new关键字是用来创建一个用户自定义的对象类型实例或者具有构造函数的内置对象的实例

js中的new做了什么?

假设我们要创建一个user的新实例,这个时候我们需要使用new关键字,那我们以这种方式调用构造函数,会经历一下四个步骤:

  1. 创建一个新的对象。
  2. 将构造函数的作用域赋给新对象(所以this就指向了这个新的对象)。
  3. 执行构造函数中的代码(为我们这个新对象添加相应的属性)。这些属性就是构造函数里面的属性,我们通过这一步将构造函数的属性添加到新对象里面。
  4. 最后返回这个新对象。

我们来看看new的例子

function Test(name) {
    this.name = name
}
Test.prototype.sayName = function () {
    console.log(this.name)
}
const newTest = new Test('海绵宝宝')
console.log(newTest.name) // '海绵宝宝'
newTest.sayName() // '海绵宝宝'
复制代码

在这个例子中,我们可以看到:

  • new关键字创建了一个新的对象。
  • 并且这个新对象可以访问到构造函数的属性。
  • 这个新对象还可以访问到构造函数的方法。
  • 也就是说,我们通过new操作符将构造函数与实例对象通过原型链链接起来了。

但是上面那个例子,构造函数并没有返回任何值(默认返回undefined),要是我们让他返回值,会发生什么情况呢?

这个分为两种情况:

  1. 返回值为原始值。
  2. 返回值为对象。

我们一种一种的来看

首选我们看看返回值为原始值的时候:

function Test(name) {
    this.name = name;
    return '111';
}
const newTest = new Test('海绵宝宝');
console.log(newTest.name); // '海绵宝宝'
复制代码

上面这个例子,我们可以看到,即使我们最后返回了一个字符串,但是最后实例对象还是输出了构造函数里面的属性值。这说明这个原始值的返回类型没有任何用处。结果还是和没有返回值一样的。

接下来我们看看返回值为对象的时候,会发生什么:

function Test(name) {
    this.name = name
    console.log(this)
    return {
        name: '蟹老板'
    }
}
const Test1 = new Test('海绵宝宝')
console.log(Test1.name)  // '蟹老板'
console.log(Test1) // {name: '蟹老板'}
复制代码

通过这个例子我们知道,当构造函数里面将返回值设置为一个对象的时候,返回的对象会作为实例对象的属性。这个返回值将会被正常的使用。

总结:

构造函数尽量不要使用返回值,因为原始值的没有任何作用,返回对象的话会导致new操作符失效。


相关文章
|
1月前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
4月前
|
JavaScript 前端开发 开发者
JavaScript中的const关键字解析
JavaScript中的const关键字解析
|
4月前
|
JavaScript 前端开发
JavaScript变量命名规则及关键字详解
JavaScript变量命名规则及关键字详解
|
4月前
|
自然语言处理 JavaScript 前端开发
在JavaScript中,this关键字的行为可能会因函数的调用方式而异
【6月更文挑战第15天】JavaScript的`this`根据调用方式变化:非严格模式下直接调用时指向全局对象(浏览器为window),严格模式下为undefined。作为对象方法时,`this`指对象本身。用`new`调用构造函数时,`this`指新实例。`call`,`apply`,`bind`可显式设定`this`值。箭头函数和绑定方法有助于管理复杂场景中的`this`行为。
58 3
|
4月前
|
JavaScript 前端开发 C++
JavaScript中的let关键字详解
JavaScript中的let关键字详解
|
5月前
|
自然语言处理 JavaScript 前端开发
在JavaScript中,this关键字的行为可能会因函数的调用方式而异
【5月更文挑战第9天】JavaScript中的`this`关键字行为取决于函数调用方式。在非严格模式下,直接调用函数时`this`指全局对象,严格模式下为`undefined`。作为对象方法调用时,`this`指向该对象。用`new`调用构造函数时,`this`指向新实例。通过`call`、`apply`、`bind`可手动设置`this`值。在回调和事件处理中,`this`可能不直观,箭头函数和绑定方法可帮助管理`this`的行为。
39 1
|
5月前
|
JavaScript 前端开发
JavaScript 关键字
【5月更文挑战第2天】JavaScript 关键字。
58 2
|
5月前
|
JavaScript 前端开发 数据安全/隐私保护
|
5月前
|
JavaScript 前端开发
js开发:请解释this关键字在JavaScript中的用法。
【4月更文挑战第23天】JavaScript的this关键字根据执行环境指向不同对象:全局中指向全局对象(如window),普通函数中默认指向全局对象,作为方法调用时指向调用对象;构造函数中指向新实例,箭头函数继承所在上下文的this。可通过call、apply、bind方法显式改变this指向。
32 1
|
5月前
|
前端开发 JavaScript
JavaScript:this-关键字,2024中级前端开发面试解答
JavaScript:this-关键字,2024中级前端开发面试解答