首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果使用“new”来实例化带有工厂函数的对象,那么它会改变什么吗?

问如果使用“new”来实例化带有工厂函数的对象,那么它会改变什么吗?
EN

Stack Overflow用户
提问于 2018-05-09 01:11:12
回答 3查看 44关注 0票数 1

在下面的测试代码中,我使用一个工厂函数以传统的方式实例化一个新对象,而不使用new关键字。它如预期的那样工作。

​

代码语言:javascript
复制
function testThis(x) {
   let middleStep = {
        firstNumber: x.firstNumber,
        secondNumber: x.secondNumber
    }
    return middleStep;
}

let newObject = testThis({firstNumber: 'ONE', secondNumber: 'TWO'});
// new keyword not used

console.log(newObject.firstNumber);

​

在下一个示例中,我使用了相同的方法,但包含了new关键字。它产生同样的输出,表面上似乎也是如此。new关键字在此上下文中使用时是否会更改任何内容,或者结果是否相同?

​

代码语言:javascript
复制
function testThis(x) {
   let middleStep = {
        firstNumber: x.firstNumber,
        secondNumber: x.secondNumber
    }
    return middleStep;
}

let newObject = new testThis({firstNumber: 'ONE', secondNumber: 'TWO'});
// new keyword included

console.log(newObject.firstNumber);

​

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-09 01:33:19

如果函数返回一个对象,用new调用它将是多余的,相当于在没有new的情况下调用它。来自MDN

执行代码new Foo(...)时,会发生以下情况:

  1. 创建了一个新对象,从Foo.prototype继承。
  2. 使用指定的参数调用构造函数Foo,并将其绑定到新创建的对象。新Foo等价于new Foo(),即如果未指定参数列表,则调用Foo时不带参数。
  3. 构造函数返回的对象将成为整个新表达式的结果。如果构造函数没有显式返回对象,则使用步骤1中创建的对象。(通常构造函数不返回值,但如果他们希望覆盖正常的对象创建过程,则可以选择返回)。
票数 1
EN

Stack Overflow用户

发布于 2018-05-09 01:24:43

“‘new”将创建一个函数对象。当您只调用一个函数时,“此”将被引用到该窗口。但如果是“新”对象,则“this”指的是对象本身。

票数 1
EN

Stack Overflow用户

发布于 2018-05-09 01:38:10

我提供了一些关于在java脚本中使用"new“和”function“的一般信息。

  1. "new“也可以用于函数。它将被视为函数构造函数。当我们这样做时,作为一般的编码实践,我们将函数命名为第一个字符为大写。
  2. 当JS引擎看到一个“新”运算符(是的"new“是一个运算符并具有优先级)时,它会在内存中创建一个空对象,然后引擎将为这个新创建的空对象指定" this”引用。 在函数构造函数的末尾,JS引擎将使用我们在构造函数中创建的属性填充空对象,并自动返回对象。 示例://这是一个接受两个参数的函数构造函数 函数Human(名字、姓氏){ this.firstname =名字;// "this“将指向humanIdentity this.lastname =姓氏; // JS引擎将自动返回具有上述属性的对象 } var humanIdentity = new Human(‘Mr..’,'JS');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50244169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档