2016-11-10 7 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を呼び出すこともでき、メソッドを "say"と呼ぶのと同じ結果を得ることができます。 基本的にman( 'text')はman.say( 'text')と同じ効果をもたらします。 es6クラスの構文を使用してこのパターンを再作成するにはどうすればよいですか?

+0

機能の杖(文) が実際に人と呼ばれています! –

+3

メンテナンス性のために、あなたに非常に正当な理由がない限り、それをしないでください。 – Timo

+0

@GiovanniBrunoあなたのquestinを簡単に編集して間違いを修正することができます – 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の私の枝をリファクタリングしてこのひどいパターンを取り除こうとするつもりですが、物事が難しくなると私はこの方法を試みます –

関連する問題