我的课程定义如下:
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")'
我做错了什么?此外,_
,2
和default
在我的班级名称旁边的错误消息中的含义是什么?
答案 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");