2016-11-10 53 views
0

我工作的一个节点模块上,我想用ES6类语法风格的一致性,保持,但我发现这个模式,我无法重现:的Javascript ES6类语法模式

const proto = module.exports = function(options) { 
    man.opts = options || {}; 
    function man(sentence) { 
     man.say(sentence); 
    } 

    man.__proto__ = proto; 
    man.age = 29; 
    man.say = function(sentence) { 
     console.log(sentence); 
    }; 
    return man; 
}; 

奇怪这个功能的事情是我可以把它称为一个标准的构造函数,并让他的方法和道具得到一个人,但我也可以称人为一个函数,并获得与称为他的方法“说”相同的结果。 基本上man('text')产生man.say('text')的相同效果; 如何使用es6类语法重新创建此模式?

+0

功能甘蔗(句子) 实际上被称为男人! –

+3

为了可维护性,除非你有很好的理由,否则不要这样做。 – Timo

+0

@GiovanniBruno你可以简单地编辑你的问题来修正错误 – Bergi

回答

1

基本上man('text')产生的man.say('text')

最佳相同的效果不使用该图案在所有。

如何使用es6类语法重新创建此模式?

你可以做到这一点类似于extending Function

export default class { 
    constructor(options) { 
     const man = sentence => this.say(sentence); 
     Object.setPrototypeOf(man, new.target.prototype); 

     man.opts = options || {}; 
     man.age = 29; 

     return man; 
    } 
    say(sentence) { 
     console.log(sentence); 
    } 
} 
+0

理解,tnx !我会尝试重构我的Express分支,消除这种可怕的模式,但如果事情变得太难,我会尝试这种方式 –