Javascript新函数构造函数没有't返回所需的值

Javascript new function constructor doesn't return the wanted value

本文关键字:返回 新函数 函数 构造函数 Javascript      更新时间:2023-10-23

function Add(a, b){
	this.a = a, this.b = b;
	return this.a + this.b;
}
var add5 = new Add(2, 3);	// ? add5 = 5
console.log(add);

"typeof add5"为Object,"add5 instanceof Add"为true。

我的问题是:

  1. 在这种情况下,如何返回我想要的值5
  2. 在函数Add中,我显式返回5,为什么我得到返回Add实例
  3. new Function()是否只返回此实例

1。在这种情况下,如何返回我想要的值5

有一个简单的函数,可以直接调用,不需要new运算符。

function add(a, b) {
    return a + b;
}
document.write(add(2, 3));

2.在函数Add中,我显式返回5,为什么我得到返回Add实例

3.new Function()只返回这个实例吗

由于使用了new运算符,您可以获得该实例。

3.构造函数返回的对象成为整个新表达式的结果。如果构造函数没有显式返回对象,则使用步骤1中创建的对象。(通常构造函数不会返回值,但如果他们想覆盖正常的对象创建过程,可以选择这样做。)

根据这一点,新实例不会返回基元数据类型。您只能用对象覆盖返回值(this)。

新操作符用于创建对象。在您的案例中,add5.aadd5.b分别填充有2和3。

你应该做以下事情。

function Add(a, b){
    this.a = a, this.b = b;
    this.result = function(){
        return this.a + this.b;
    }
}

并像一样使用它

var add5 = new Add(2, 3);   // ? add5 = 5
console.log(add5.result());

这不是简单多了吗。。。

function Add(a, b){
            return a + b;
}
var add = Add(2, 3);    // ? add = 5
console.log(add);

或者如果你想要一个与方法相关的实例

function AddNumbers(a, b){
    this.a = a;
    this.b = b;
    return this;
}
AddNumbers.prototype.add = function(){
      var sum  = this.a+this.b;
      console.log(sum);
      return sum;
}
var addObject = new AddNumbers(2, 3);   // ? add = 5
addObject.add();

您必须删除'new'关键字,因为这会从该函数中创建一个新对象。只需按以下方式调用函数即可。

function Add(a, b){
	this.a = a, this.b = b;
	return this.a + this.b;
}
var add = Add(2, 3);	// ? add = 5
console.log(add);