MDNでこれを読むことができそうDoIHavePrototype.GetFnName();
好きなクラス(いないそのインスタンス)を使用して、それを呼び出す必要がありますそれをオブジェクトに導入する4つの方法があります。
最初の方法は、オブジェクトのプロトタイプに関数を割り当てることです、あなたの元のコードに何をやったかである:
Foo.prototype.myFunc = function() { .... }
もう一つの方法は、コンストラクタ内this
にそれを割り当てることです。
function Foo() {
this.myFunc = function() { .... }
}
我々はまた、インスタンスに直接割り当てることができます。
var foo = new Foo();
var myFunc = function() { .... }
foo.myFunc = myFunc
最後に、我々は、インスタンスに関数をバインドすることができます。
var foo = new Foo();
var myFunc = function() { .... }
var myFuncFoo = myFunc.bind(foo)
最後のケースは、以来、少し特別ですインスタンスのプロパティではありませんが、呼び出しコンテキストがインスタンスに付加されているため、インスタンスメソッドのように動作する関数があります。
インスタンスメソッドを定義する最も一般的な方法は、プロトタイプへの割り当てです。コンストラクタのprototype
プロパティは、インスタンスが継承するものです。したがって、ここでは物を入れます。インスタンスはコンストラクタ関数ではなくprototype
プロパティから継承することに注意してください。コンストラクタのプロパティに何かを代入しても、それをインスタンスのプロパティとして利用することはできません。
this
への割り当ては、バインドされたメソッドが必要な場合に使用されることがあります。例えば:私たちは別の関数(例えば、イベントハンドラ)の値としてinstance.boundMeth()
を渡したい場合は
function Foo() {
this.boundMeth = this.meth.bind(this)
this.val = "foo"
}
Foo.prototype.meth = function() {
console.log(this.val)
}
これは便利です。JavaScriptでは、多くのオブジェクト指向言語とは異なり、これらの方法は、結合していないです:コンストラクタのプロトタイプに割り当てる場合
// Using Foo from the previous example
function runner(fn) {
fn()
}
var obj = new Foo()
runner(obj.meth) // Logs `undefined`
runner(obj.boundMeth) // Logs `foo`
、あなたは一括で割り当てることができます。
Foo.prototype = {
meth1: function() { .... },
meth2: function() { .... },
}
あなたはES6を使用する場合は、あなたもclass
を使用することができますキーワード:
class Foo {
myFunc() { .... }
}
これはFoo.prototype.myFunc = function() { .... }
と同じです。
クラスに関数を直接追加すると 'static method'が生成され、' Array.from'のように呼び出すことができます。したがって、あなたの場合、 'DoIHavePrototype.GetFnName();'のように(インスタンスではなく)クラスを使用して呼び出す必要があります。 – Krusader
静的メソッドが作成されたことを知らせるためにcharm.tnxのように動作しました。 –
私は実際の回答を作成しました。あなたの質問に答えた場合、それを答えと見なしてください。 – Krusader