Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建ES6 JavaScript类成员最有效的方法是什么?_Javascript_Performance_Class_Oop_Prototype - Fatal编程技术网

创建ES6 JavaScript类成员最有效的方法是什么?

创建ES6 JavaScript类成员最有效的方法是什么?,javascript,performance,class,oop,prototype,Javascript,Performance,Class,Oop,Prototype,对于ES5,有一种最佳的方法来创建对象及其成员,如下所示 var Car = function () { this.milage = 0; } Car.prototype.run = function () { this.milage++; } 但是对于ES6,我们使用class语法来创建类 class Car { constructor(){ this.milage = 0; } } 当我们使用这种ES6方法时,我有一个问题:创建类成员的最有效方

对于ES5,有一种最佳的方法来创建对象及其成员,如下所示

var Car = function () {
  this.milage = 0;
}

Car.prototype.run = function () {
  this.milage++;
} 
但是对于ES6,我们使用
class
语法来创建类

class Car {
    constructor(){
        this.milage = 0;
    }
}
当我们使用这种ES6方法时,我有一个问题:创建类成员的最有效方法是什么

这就像在类中创建类成员一样吗

class Car {
    constructor(){
        this.milage = 0;
    }

    run() {
        this.milage++;
    }
}
或者,使用原型方法

Car.prototype.run = function () {
    this.milage++;
} 

你两者都可以。在99.9%的情况下,他们会做完全相同的事情。它们包含类方法语法版本:

run() {
    this.milage++;
}
几乎就是语法糖

Car.prototype.run = function () {
    this.milage++;
}
使用方法语法,属性被放置在
Car.prototype

等级车{
构造函数(){
这个。milage=0;
}
运行(){
这个.milage++;
}
}

console.log(Car.prototype.run)为什么要使用
原型
?我的意思是,所有的结果都差不多,但是混合语法会很奇怪,比如将一个方法定义为类语法的一部分实际上在原型上定义了它
class
只是对“旧”函数事物的语法糖分
class Car(){constructor(){}
=
function Car(){}
run(){}
=
Car.prototype.run=function(){}
性能与这个问题有什么关系?您是否遇到过对象创建将成为瓶颈的情况?@Teemu我也想对此发表评论。通常,使用原型来定义方法实际上与性能无关。不是在CPU周期方面。它确实会减少内存膨胀,因为如果你有
函数Person(name){this.name=name;this.sayHI=()=>`Hi,我是${this.name}}}
并且你创建了一千个
Person
对象,那么你在内存中也定义了一千个
sayHI
函数。使用原型,无论有多少
Person
对象,您都可以使用单个函数。所以,内存效率是有一个方面的,但严格说来,它并不是普遍的更好。@VLAZ,我同意。但是,OP似乎会问,在类声明内部设置原型的方法和在类声明外部设置方法之间是否存在性能差异。这两种方法的结果都是相同的原型,我真的看不出这两种方法之间有什么显著的性能差异。我只能假设,OP认为每次在创建新实例时(这不会发生),都会将方法设置到原型中,并且如果将方法设置在类声明之外,则实例创建可能会更快。这个问题不能说明。。。