JavaScript中“构造函数”方法的目的是什么?

时间:2019-08-17 00:52:26

标签: javascript

此链接说明我们可以使用构造函数方法创建constructor。 我想知道何时使用它,以及它与构造函数的区别。据我了解。常规函数是用new调用时的构造函数。在此示例中,“构造函数”关键字起什么作用

class Cat {

      constructor(name,color){
          this.name = name;
          this.color = color;
      }

      speak(){
          console.log("Meow");
      }
}

4 个答案:

答案 0 :(得分:1)

当使用new Cat()实例化此类的新实例时,您将按照构造函数参数定义的顺序传入猫的名称和颜色。然后,您将拥有一个Cat的新实例,其中定义了名称和颜色属性。

const spot = new Cat('Spot', 'Orange')

这将创建一只名为“ Spot”和颜色为“ Orange”的新猫。这只是创建新实例时执行的保留关键字。

它与ES5语法相似,只是带有一些语法糖:

function Cat(name, color) {
  this.name = name;
  this.color = color
}

Cat.prototype.speak = function() {
  console.log('Meow')
}

const c = new Cat('Spot', 'Orange')
c.speak() // Meow
console.log(c.name, c.color) // Spot Orange

您可以在MDN

上阅读更多内容

答案 1 :(得分:0)

JavaScript中的每个对象原型都带有构造函数方法。构造函数方法是用于创建对象的构造函数。

例如,我们可以使用String构造函数将数字转换为字符串

String(2) === "2";

我们也可以

"".constructor(2) === "2"

这是相同的,因为字符串的“构造函数”指向String构造函数。

JavaScript中的类不是类,因为它们使用Java或Ruby之类的语言,因为JavaScript使用原型继承系统。因此,JavaScript中的类只是普通构造函数的糖语法。这使开发人员可以利用JavaScript的某些OOP功能,而无需了解有关其继承系统如何工作的许多细微差别。

以下内容:

function Cat (name,color){
     this.name = name;
     this.color = color;
 }

Cat.prototype.speak = function(){
  console.log("Meow");
}

实际上与

相同
class Cat {
 constructor(name,color){
     this.name = name;
     this.color = color;
 }

 speak(){
     console.log("Meow");
 }
}

两者都可以使用new关键字实例化

new Cat("Mittens", "black");

在类示例中描述的“构造函数”指向底层的JavaScript构造函数。请记住,JavaScript中的“类”只是构造函数的友好包装,使它的使用与使用其他语言的类更加相似。

使用类时,可以使用“构造函数”方法直接为要创建的对象(而不是原型)设置一些值。原型是使用类/构造函数创建的所有对象所共有的对象,用于在它们之间共享功能。

答案 2 :(得分:0)

不要忘记javascript中没有真正的class。如果您尝试转译您的课程,将会得到类似于以下内容的信息:

var Cat = function () {
  function Cat(name, color) {
    this.name = name;
    this.color = color;
  }

  Cat.prototype.speak = function speak() {
    console.log("Meow");
  };

  return Cat;
}();

毫不奇怪,构造函数是构造函数。

答案 3 :(得分:0)

作为语法的一部分,必须在类声明/表达式中使用constructor方法。它提供了“创建”该类的新实例时要执行的代码。这里的“创建”和“构造”在JavaScript中的含义相同。

该类的构造方法创建一个构造函数对象,该对象是类声明的值:

class myClass {
    constructor() {
        this.bar = "foo";
    }
    moreInfo() {
        console.log( "myClass is the same as its constructor method = " 
        + (myClass === this.constructor)); 
    }
}
    
// what is myClass?
console.log( new myClass().moreInfo());

长话短说,类声明创建了一个同名的构造函数。

回到基本的JS,所有标准函数(都不是箭头 函数或类声明或表达式)在设计上可以用作构造函数:仅仅因为您从未将它们用作构造函数并不意味着您不能这样做。当然,将特定函数用作构造函数的 sense 确实取决于它是否为构造对象而编写:

function add( a, b) {  // Not written as a constructor
    return a+b;
} 
function record( a, b) { // written as a constructor
    this.a = a;
    this.b = b
}