javascript - 模拟 'class' 时,为什么要在 .prototype 属性中而不是在构造函数本身中设置方法?

标签 javascript class object constructor prototype

我正在尝试理解 JavaScript 中的“类”。

通常在 JavaScript 中模拟类看起来像这样:

function MyClass(someParameter) {
    this.someValue = someParameter;
    this.someOtherValue = "green";
}

MyClass.prototype.someMethod = function() {
    console.log("Hello!");
};

虽然非函数成员是在构造函数内部设置的,但方法是在构造函数外部添加到构造函数的 .prototype 属性中。

我想知道为什么。为什么不像其他成员一样在构造函数中创建方法呢?含义:

function MyClass(someParameter) {
    this.someValue = someParameter;
    this.someOtherValue = "green";

    this.someMethod = function() {
        console.log("Hello!");
    }
}

最佳答案

这里有一些要点:

  • 性能:每次创建实例时都会创建 Ctor 方法,而创建一次原型(prototype)方法并继承。这里使用原型(prototype)更好。
  • Ctor 方法可以访问函数内部的私有(private)对象,而原型(prototype)方法则不能。

关于javascript - 模拟 'class' 时,为什么要在 .prototype 属性中而不是在构造函数本身中设置方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845479/

相关文章:

c++ - C++ 中的枚举数据类型和类 API

php - 如何随机化 PHP 中的对象数组?

python 动态对象查询

javascript - 将指令中的值传递给 ng-model。 -AngularJS

javascript - 从单独的文件中调用另一个常量

c# - 如何从另一个类引用 3D 数组?

java ;从另一个类访问成员实例变量

java - 如何返回两个列表之间的差异?

javascript - 内联 JavaScript 代码不起作用

javascript - D3 + 谷歌地图 + 多点路径