2017-07-19 3 views
-2

NodeJSでオブジェクトをインスタンス化する方法と、クラスを宣言するさまざまな方法について基本的な質問があります。 私はいくつかのチュートリアルを見たことがありますが、どちらの方法を使うべきか、なぜ異なる方法があるのか​​を説明するチュートリアルは記述されていません。NodeJSオブジェクトインスタンス - クラスまたは関数

オブジェクトのインスタンスを作成し、まったく同じではあるがコードが完全に異なる2つのコードスニペットを作成したいとします。

私の質問:私は同じ結果を得ているのですか、それとも違うとか、さらにどのように使うべきか分からない特別なものがありますか?

ExampleA:

class ExampleA { 

    constructor() { } 

    method() { 
     console.log("Hello world"); 
    } 
} 
module.exports.ExampleA = ExampleA; 

がExampleB:

function ExampleB() { 
} 

NoSQL1.prototype.method = function() { 
    console.log("Hello world"); 
} 
module.exports.ExampleB = ExampleB; 

私は右のそれを得た場合は、ExampleBに私はちょうど "Classname.prototype.Method" 内の既存のクラスに新しい機能を追加し

多分もっと多くの方法がありますか? C#の開発者として、私は現在ExampleAを好んでいます...

+0

可能な複製となぜ私はいけません"new"を使用する(https://stackoverflow.com/questions/20266358/understanding-why-true-prototypal-inheritance-is-better-than-classical-pseudo-pr) – Bricky

+0

[Javascriptを作成する最良の方法Classes?](https://stackoverflow.com/questions/13190097/whats-the-best-way-to-create-javascript-classes/13190493#13190493)、[JavaScriptの 'prototype'と 'this'の使い分け?](https://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript)、[Object Orien Javascriptの質問に答える](https://stackoverflow.com/questions/444170/object-oriented-questions-in-javascript) – Bricky

答えて

-1

同じ結果が得られます。 クラスは、最新のバージョンがsyntactic sugarECMAScript(ES)です。 JavaScriptはまだprototype basedあるので、あなたはので、例えばsepcial単語thisにrefrenceについて気をつけなければなりません。真の原型継承は、古典的/疑似原型継承よりも優れている理由[理解の

class ExampleA { 
    constructor() { 
     this.text = 'Hello World!' 
    } 
    method() { 
     console.log(this.text); 
    } 
} 


let a = new EampleA() 
a.method() // will print 'Hello World' 
let m = a.method; 
m() // will throw exception "Cannot read property 'text' of undefined 
let b = {text: 'Hi'}; 
m.call(b) // will print 'Hi' 
0

大きな違いはありません。 Javascriptには従来のClassesはありません。すべてが単なるオブジェクトであり、例Aの構文は基本的に慣習とOOPと関数型プログラミングの両方に対応しようとしているJavascriptのためです。

しかし、最初のパターンでは、クロージャを使用してプライベート変数を作成することができます。

関連する問題