javascript - 怎么得到es6一个class的所有方法
高洛峰
高洛峰 2017-04-11 11:59:33
[JavaScript讨论组]
    class say {
        constructor() {
        }

        sayHello() {
            console.log('hello');
        }

        get sayGoodbye() {
            console.log('goodbye');
        }

        static wocao() {
            console.log('wocao');
        }
    }

这样一个class
定义的property都是不可遍历的

看了下babel转码到es5的代码

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");
    }
}

注意到descriptor.enumerable = descriptor.enumerable || false; 这句
想知道怎么设置 descriptor.enumerable


    var say = function () {
        function say() {
            _classCallCheck(this, say);
        }

        _createClass(say, [{
            key: 'sayHello',
            value: function sayHello() {
                console.log('hello');
            }
        }, {
            key: 'sayGoodbye',
            get: function get() {
                console.log('goodbye');
            }
        }], [{
            key: 'wocao',
            value: function wocao() {
                console.log('wocao');
            }
        }]);

        return say;
    }();
    
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
阿神

遍历ES6 Class的方法可以使用getOwnPropertyNames,它可以遍历非enumerable的成员:

    class say {
        constructor() {
        }

        sayHello() {
            console.log('hello');
        }

        get sayGoodbye() {
            console.log('goodbye');
        }

        static wocao() {
            console.log('wocao');
        }
    }
    
    Object.getOwnPropertyNames(say) // ["length", "name", "prototype", "wocao"] 获取静态的wocao
    
    var x = new say
    Object.getOwnPropertyNames(Object.getPrototypeOf(x)) // ["constructor", "sayHello", "sayGoodbye"]

你要是想改enumerable:

    class say {
        constructor() {
        }

        sayHello() {
            console.log('hello');
        }

        get sayGoodbye() {
            console.log('goodbye');
        }

        static wocao() {
            console.log('wocao');
        }
    }
    
Object.defineProperties(say, {
  "constructor": {
    enumerable : true
  },
  "sayHello": {
    enumerable : true
  },
  "sayGoodbye": {
    enumerable : true
  },
  "wocao": {
    enumerable : true
  }
});

    Object.keys(say) // ["wocao", "constructor", "sayHello", "sayGoodbye"]
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号