首页 > 解决方案 > JS - 每次创建类时都会重新定义类成员函数吗?

问题描述

当使用 new 关键字创建此类结构时,JavaScript 是否每次都重新创建在类或函数内部定义的函数?还是用指向原始类的指针重新创建它以节省内存?更进一步——如果这样的娱乐发生,是否值得在常用和大量使用的对象之外指定功能?

标签: javascriptnode.jsclass

解决方案


您的问题可以使用更多细节,因为它取决于您的代码的外观。例如,如果您在谈论原型方法,那么不,新实例将简单地引用原型方法。您可以在以下示例中看到:

function Person(name) {
    this.name = name;
}

Person.prototype.introduce = function() {
    console.log('Hi, my name is ' + this.name);
}

let nick = new Person('Nick');

Person.prototype.introduce = function() {
    console.log('Howdy, I am ' + this.name);
}

nick.introduce();

显然在这种情况下,nick.introduce是指原型方法(搜索原型链的实际机制有点复杂,我建议进行一些侧面研究)。

另一个例子实际上是在构造函数中声明一个函数。在这种情况下,您实际上是在每次实例化对象时创建它。下面类似的例子。

function Person(name) {
    this.name = name;
    this.introduce = function() {
        console.log('Hi, my name is ' + this.name);
    }
}

let nick = new Person('Nick');

Person.prototype.introduce = function() {
    console.log('Howdy, I am ' + this.name);
}

nick.introduce();

在这种情况下,nick实例获得了自己的introduce方法,所有未来的实例都将获得自己的introduce方法。在这种情况下,分配或更改同名的原型方法无关紧要,因为我们在nick名为 的实例上找到了自己的属性introduce,因此我们不必搜索原型链。


推荐阅读