2016-08-07 1 views
0

にオブジェクトのメソッドを呼び出すIプロトタイプを持っています私はそれにmethod1()の結果にアクセスしたいと思います。しかし、これは動作しません、と私はなぜ...

myClass.prototype.method2() = function() { 
    return myClass.method1(); 
} 

私はTypeError例外を取得するかわからない:myClass.method1は機能

ではありません誰もが構文的/概念的に間違っているものを指摘することができますこれとともに?そして改善を提案しますか?

また、このインスタンスでは、 'class'と 'prototype'という用語を正しく使用しています。誰かが用語を訂正できる場合や、この種のプロセスに関連する他の用語を指摘していただければ幸いです。

ありがとうございます。 (ラフOOの用語を使用して)ためだ

+2

の関数定義の括弧は必要...あなたはおそらくしたいことは、 'this.method1を()'を使用することではありません。しかし、どのように 'これ 'の動作に注意してくださいhttp://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work/3127440#3127440 – vlaz

+1

' var myClass = function(){}; 'はありません"プロトタイプ"。それはコンストラクタです。 –

+0

ありがとうVid - このインスタンスで私の問題をソートしました、+ 1 – Paulos3000

答えて

1
var myClass = function() {}; 

これはコンストラクタではなくプロトタイプです。その違いを説明するのはquick readです。

thisを使用して呼び出すことができます。ブラシアップの場合はbest placeです。

const MyClass = function() {}; 

MyClass.prototype.method1 = function() { 
    return x; 
} 

MyClass.prototype.method2 = function() { 
    return this.method1(); 
} 

はまた、*はMyClass *存在しないので、それはだmethod1method2

+0

実際はそれは私の愚かなことでした。私はすでにそれを知っていました。ちょうど不注意な誤植(re: 'method1'と' method2'の後ろに括弧を使います)。 'this'キーワードは私が必要なものです。ありがとう! – Paulos3000

+0

甘い。バグの私たちは、常に愚かなものです:) – Vandesh

0

は、method1()インスタンス方法であり、あなたは静的方法としてそれを呼び出すようにしようとしています。

const MyClass = function() {}; // MyClass is a constructor 

MyClass.prototype.method1() = function() { 
    return x; 
} 

MyClass.prototype.method2() = function() { 
    return this.method1(); // Call it as an instance 
} 

、あるいは:

この用語は誤解を招くことは注目に値する
const MyClass = function() {}; 

MyClass.method1() = function() { // "static" method 
    return x; 
} 

MyClass.prototype.method2() = function() { 
    return MyClass.method1(); // Call it as a "static" 
} 

、スタティックまたはインスタンスメソッドのみ機能は、実際には、JavaScriptにはメソッドが存在しない(存在しない、およびプロパティその関数への参照を保持する)。

0

JS oopには公開メソッドと特権メソッドの違いがあります。

myClass.method1();は、静的メソッドです。これは通常の関数のようなもので、myClassオブジェクトインスタンスとは関係がありません。

だから、完全な名前空間を使用して、それを呼び出す必要があります:

MyClass.method1()

+0

@Downvoters ...説明してください。 – Riad

+0

合意してください。私の元の投稿と私が解決策としてマークしたものも、明白な理由がないために下落しました。 +1してください。 – Paulos3000