2016-04-16 23 views
-1

は、私はクラスvar Emp = function() { };を作成し、パフォーマンス上のプロトタイプまたは新しく作成されたインスタンスでコンストラクタメソッドを呼び出す必要がありますか?

Emp.prototype.function1 = function() { /* some definition */ }; 
Emp.prototype.function2 = function() { /* some definition */ }; 
// .. so on 

何だろうな影響として、クラスのプロトタイプで関数を定義し、どのアプローチが効果的である理由は?

ケース1:私はケース2

Emp.prototype.function1(); 

関数を呼び出す場合:あなたはケース1を使用する場合は、thisコンテキストを指します

var empobj = new Emp(); 
empobj.function1(); // function calling 
+6

jQueryとは何が関係していますか? – Pointy

+2

インスタンスを作成しない場合、プロトタイプのプロパティとして関数を作成するのはなぜですか?ケース1は無意味です。ケース2は、関数が実際に呼び出されたインスタンスで機能しない場合は無意味です。 – nnnnnn

+1

ケース2は行く方法です –

答えて

1

私が最初にEmpのインスタンスを作成した場合prototypeオブジェクトであるため、instanceの値にはアクセスできません。例えば

var x = function(){ this.a = 10 }; 
x.prototype.y = function(){ console.log(this.a) }; 
x.prototype.y(); // This will print undefined since 
//there is no properties other than y in the prototype of x. 

ケース2と同時に、あなたがprototypeオブジェクトならびにinstances値にアクセスすることができます。

function Emp() { /* ... */ } 
Emp.function1 = function() { /* ... */ }; 

またはES6と:そのためのサンプルコードは、すなわちEmpではなく、Emp.prototypeで定義され、メソッドがインスタンスで呼び出されていない場合、彼らは静的である必要があり、

var x = function(){ this.a = 10 }; 
x.prototype.y = function(){ console.log(this.a) }; 
var obj = new x(); 
obj.y(); // `y` can be accessed also. And it will output 10. 
1

だろうクラス:次に

class Emp { 
    static function1() { /* ... */ } 
} 

このように関数を呼び出す:

Emp.function1(/* arguments */); 
関連する問題