如何从自定义类访问方法?

时间:2017-01-25 22:02:06

标签: javascript class methods

我的课程定义如下:

export default class MyClass {

    myMethod(code){
        console.log("The code is" + code)
    }
}

如何从我的主课程中访问它?在主类中,我有以下几行代码:

import MC from './MyClass'

...

MC.myMethod("987");

我得到的错误是:

undefined is not a function (evaluating '_MyClass2.default.myMethod("987")'

我做错了什么?此外,_2default在我的班级名称旁边的错误消息中的含义是什么?

3 个答案:

答案 0 :(得分:2)

那是因为你已经创建了一个实例方法,所以你有两个选择。创建该类的实例:

var c = new MyClass();

c.myMethod();

或者将其设置为static方法:

static myMethod(code) {
  // ...
}

另一种方法是直接export函数:

export myMethod(code) {
  // ...
end

答案 1 :(得分:1)

在声明JS Es6类时,请记住,如果使用 static 关键字,其方法成员将绑定到类的每个实例或绑定到类本身:

class MyClass {

     myMethod() {

         // each object created with the *new* keyword will have this method:
         // const o = new MyClass();
         // typeof o.myMethod === "function" will return true 
     }

}

class MyClass {

     static myMethod() {

         // typeof MyClass.myMethod === "function" will return true 

     }

}

根据其声明,当调用其词汇上下文时,此将绑定到实例(第一种情况)或类本身(第二种形式)。

您现在还应该将所有实例方法(如第二种情况)放在您类的prototype属性中。所以你有:

class MyClass () {

    myMethod() {} 

}

(typeof MyClass.protototype.myMethod === "function") // true

const o = new MyClass()

(o.myMethod === MyClass.prototype.myMethod); // true 

对于静态方法(或类方法),该方法直接附加到类对象。

您在案例中看到的错误是由于您的方法未使用static关键字声明而导致的。

答案 2 :(得分:0)

在开始调用其方法之前,您需要声明类的对象,就像在任何其他编程语言中一样。

export class MyClass {

    public myMethod(code){
        console.log("The code is" + code)
    }
}

然后将其导入到您想要使用的任何地方

import MC from './MyClass'

从导入中创建一个对象并调用方法

var mc = new MC();
mc.myMethod("987");