'use strict';
class Test {
lorem () {
}
static ipsum () {
}
}
console.log(Test.lorem); // undefined
console.log(Test.ipsum); [Function]

有没有办法访问Test.lorem?我已经尝试过Test.prototype.lorem和Test.lorem,但都返回undefined。
我想测试的函数的构造函数做了类似构造函数的事情,所以在单元测试中我只想直接从类中运行函数。
有什么想法吗?
答案 0 :(得分:2)
该方法可在prototype
。
Test.prototype.lorem
但是,请记住,直接调用此方法意味着this
将不会引用该对象的实例。
Test.lorem
未定义,因为它不是静态方法。非静态方法被添加到prototype
对象。
使用ES2015预设从Babel 6编译的证明。
'use strict';
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Test = (function () {
function Test() {
_classCallCheck(this, Test);
}
_createClass(Test, [{
key: 'lorem',
value: function lorem() {}
}], [{
key: 'ipsum',
value: function ipsum() {}
}]);
return Test;
})();
console.log(Test.prototype.lorem);
&#13;
答案 1 :(得分:0)
除非它是静态成员,否则你不应该在没有实例的情况下执行方法。
这是大多数(如果不是全部)面向对象语言的一个非常基本的概念。
如果您只想获得该函数的参考,那么使用类原型确实有效。
顺便说一句,你实际上可以执行没有实例的方法,因为JavaScript确实允许这种灵活性,但是你应该避免这种做法。
答案 2 :(得分:-1)
您需要Test
的实例。
class Test {
lorem () {
console.log('test');
}
static ipsum () {
}
}
var test = new Test();
test.lorem();
或者你可以做到
Test.prototype.lorem();
答案 3 :(得分:-2)