Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Javascript 什么';静态成员和实例成员之间的区别是什么?_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 什么';静态成员和实例成员之间的区别是什么?

Javascript 什么';静态成员和实例成员之间的区别是什么?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我想知道这两个函数在javascript示例类中的区别是什么 class Sample{ constructor(){} sampleOne(){ console.log('this is test') } static sampleTwo(){ console.log('this is test too') } } 第一个是实例方法。这意味着您必须创建Sample类的新实例来调用它: let instance = new Sample(); instan

我想知道这两个函数在javascript示例类中的区别是什么

class Sample{
  constructor(){}

  sampleOne(){
    console.log('this is test')
  }
  static sampleTwo(){
    console.log('this is test too')
  }
}
第一个是实例方法。这意味着您必须创建
Sample
类的新实例来调用它:

let instance = new Sample();
instance.sampleOne();
Sample.sampleTwo();
第二个是静态方法,因此不必使用类的实例来调用它:

let instance = new Sample();
instance.sampleOne();
Sample.sampleTwo();

static
是一种声明,表示此方法
sampleTwo
可以在类级别而不是实例级别上调用<但是,code>sampleOne是一个实例方法,因此您需要实例化示例类的一个实例

const test = Sample();
test.sampleOne(); //works
test.sampleTwo(); //won't work cause it is defined on class level

Sample.sampleOne(); //won't work cause not static defined
Sample.sampleTwo(); //works because it is static.

静态方法不绑定到类实例。但是对班级本身。因此,虽然方便,但您将无法访问此,因为没有可指向的实例。

静态方法是在类本身上调用的

例如,以下操作将非常有效

Sample.sampleOne()
// undefined


Javascript没有类,因此用“类”和“实例”来解释是不准确的。在javascript中,只有具有构造函数(函数)和原型(其他对象)的对象。ES6“类”语法只是一个装饰器,它只是将类似java的类声明转换为原型,即:

  • 类被转换为构造函数(函数):

  • 普通方法附加到构造函数的
    prototype
    属性,并复制到
    对象。[[prototype]]
    以后执行
    new Sample()
    时:

  • “静态”方法直接附加到构造函数:

    sampleTwo  => Sample.sampleTwo
    
说明:


一个人在实例上被调用,一个人在类上被调用。简单的搜索就能回答这个问题。(任意一个。)“静态成员和实例成员之间有什么区别?”和“我什么时候应该使用静态成员?”是非常不同的问题。p.s.w.g,是的,你说得对,我忘了更改question@DaveNewton:“类”和“实例”不太适用于Javascript(如果你真的想了解发生了什么)。@MaheerAli One不是一个打字错误。尽管调用
sampleOne()
会引发错误。那么
Sample.prototype.sampleOne
呢?那么
Sample.prototype.sampleOne
呢?这里没有实例,但仍然有一个可用的方法。@dandavis很好,它是可用的,因为该方法的主体没有提到
这个
,所以您对所示示例的理解是绝对正确的。然而,在现实中,不可能有一个实例方法不使用
这个
。如果是这样的话,那么将它包装到类中有什么意义呢?如果yopu使用这个,它可以调用/应用/绑定它。这和任何其他方法的用途一样……不幸的是,我对js作为原型语言的了解有限。希望有人能提供答案。
sampleTwo  => Sample.sampleTwo