构造函数和类

实例: 是由类或构造函数创建的具体对象,通过 new 关键字调用构造函数创建,或通过 class 关键字定义类并创建

类方法/静态方法:它是定义在类或构造函数本身上的方法,通过类或构造函数调用,不能通过实例调用 

1.通过构造器创建实例创建静态方法

函数通过关键字 function 定义。函数同样可以通过内置的 JavaScript 函数构造器(Function())定义。构造函数又称为构造器。

构造函数也是一个普通的函数,命名以大写字母开头,从表现形式来说,和普通的函数没有任何区别。

构造方法是一种特殊的方法:

  • 构造方法名为 constructor()。
  • 构造方法在创建新对象时会自动执行。
  • 构造方法用于初始化对象属性。
  • 如果不定义构造方法,JavaScript 会自动添加一个空的构造方法
复制代码
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.describe = function() {  //定义实例方法
        return this.name + " is " + this.age + " years old"; 
    };
}
var person1 = new Person("Alice", 30);
console.log(person1.describe()); // 输出: Alice is 30 years old
复制代码

构造函数内部定义方法是一种常见的做法,但这种方法会导致每个实例都会重新创建这些方法,从而占用更多的内存。为了优化内存使用,通常推荐在构造函数的原型(prototype)上定义方法,这样所有实例都会共享同一个方法,从而减少内存消耗‌。

因此上面的建议改成:

复制代码
function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.describe = function() { //定义实例方法
    return this.name + " is " + this.age + " years old";
};
Person.sayHello = function() { //定义静态方法
  console.log('你好')
}
var person2 = new Person("Bob",19)
复制代码

总结:

实例方法:通过 this.methodName 定义。

静态方法:通过 ConstructorName.methodName 定义。

优化:将实例方法定义在原型上

 

2.通过类来创建实例和静态方法

类是用于创建对象的模板

我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。

每个类中包含了一个特殊的方法 constructor(),它是类的构造函数,这种方法用于创建和初始化一个由 class 创建的对象

按照构造函数形式创建类,不仅仅和编写普通的函数过于相似,而且代码并不容易理解

      .每个类都可以有一个自己的构造函数(方法),这个方法的名称为固定的constructor
      .每个类只能有一个constructor,如果包含多个构造函数,那么会抛出异常
      .当我们通过new一个类的时候会调用这个类的constructor,这时new做的事情和new一个构造函数做的事情是一样的。

复制代码
// 定义一个名为Person的类
class Person {
    // 构造函数,用于创建类的实例
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
 
    // 实例方法,用于打印对象信息
    printInfo() {
        console.log(`Name: ${this.name}, Age: ${this.age}`);
    }
 
    // 静态方法
    static jumping = function(){ 
console.log(this.name + '在jumping')
}
} // 使用构造函数创建Person对象实例 const person2 = new Person('Bob', 30); person2.printInfo(); // 输出: Name: Bob, Age: 30
复制代码

 

posted @   122www  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示