访问es2015类函数成员

时间:2015-12-16 23:44:48

标签: javascript class ecmascript-6 babeljs



'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。

我想测试的函数的构造函数做了类似构造函数的事情,所以在单元测试中我只想直接从类中运行函数。

有什么想法吗?

4 个答案:

答案 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;
&#13;
&#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)

不知道为什么我得到-1而不是w / e

类方法在ES2015中是不可枚举的

您无法直接访问非静态的类成员。

https://phabricator.babeljs.io/T959