我想知道这两个函数在javascript这个示例类中有什么区别?
class Sample{
constructor(){}
sampleOne(){
console.log('this is test')
}
static sampleTwo(){
console.log('this is test too')
}
}
答案 0 :(得分:2)
第一个是 instance方法。这意味着,您必须创建Sample
类的新实例才能调用它:
let instance = new Sample();
instance.sampleOne();
第二个是静态方法,因此您不必具有该类的实例即可调用它:
Sample.sampleTwo();
答案 1 :(得分:2)
JavaScript没有类,因此关于“类”和“实例”的解释不准确。在javascript中,只有对象,它们具有构造函数(函数)和原型(其他对象)。 ES6“类”语法只是一个装饰器,它仅将类Java的类声明转换为原型,即:
类被转换为构造函数(函数):
class Sample => function Sample()
常规方法附加到构造函数的prototype
属性,并在以后执行object.[[Prototype]]
时复制到new Sample()
:
sampleOne => Sample.prototype.sampleOne
“静态”方法直接附加到构造函数:
sampleTwo => Sample.sampleTwo
插图:
答案 2 :(得分:0)
static
是一个声明,说明可以在类级别而不是实例级别调用此方法sampleTwo
。 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.
答案 3 :(得分:0)
静态方法未绑定到类实例。但是对于班级本身。因此,在方便的同时,您将无法访问this
,因为没有实例可指向。
答案 4 :(得分:-1)
在类本身上调用静态方法。
例如,下面的方法可以很好地工作
Sample.sampleOne()
// undefined
同时
Sample.sampleTwo()
// this is a test two