55

JSに関して、両者の違いは何ですか? メソッドがオブジェクトに関連付けられていることは知っていますが、関数の目的は何ですか? それぞれの構文はどのように異なりますか?

また、これら2つの構文の違いは何ですか:

var myFirstFunc = function(param) {
    //Do something
};

function myFirstFunc(param) {
    //Do something
};

また、関数を使用する前に次のようなことをする必要があることをどこかで見ました。

obj.myFirstFunc = myFirstFunc;
obj.myFirstFunc("param");

最初の行が必要な理由とその機能は何ですか?

これらが基本的な質問である場合は申し訳ありませんが、私はJSから始めて混乱しています。

編集:コードの最後のビットについては、これが私が話していることです:

// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
  this.age = newAge;
};
// now we make bob
var bob = new Object();
bob.age = 30;
// and down here we just use the method we already made
bob.setAge = setAge;
4

8 に答える 8

62

「関数」と「メソッド」の違いは何かというタイトルの質問に答えるには。

それはセマンティクスであり、表現しようとしているものと関係があります。

JavaScript では、すべての関数がオブジェクトです。オブジェクトは、キーと値のペアのコレクションです。値がプリミティブ (数値、文字列、ブール値) または別のオブジェクトである場合、その値はプロパティと見なされます。値が関数の場合、それは「メソッド」と呼ばれます。

オブジェクトのスコープ内では、関数はそのオブジェクトのメソッドとして参照されます。オブジェクトの名前空間から呼び出されるMyObj.theMethod().関数はオブジェクトであると述べたので、関数内の関数はその関数のメソッドと見なすことができます。

「オブジェクトの saveメソッドを使用します」などと言うことができます。そして、「この保存メソッドは関数をパラメーターとして受け入れます。」しかし、通常、関数がメソッドをパラメーターとして受け入れるとは言いません。

ところで、 Stoyan Stefanovによる本JavaScript Patternsは、あなたの質問を詳細にカバーしています。言語を本当に理解したいのであれば、私はそれを強くお勧めします。この件に関する本からの引用は次のとおりです。

したがって、オブジェクトである関数 A にプロパティとメソッドがあり、そのうちの 1 つがたまたま別の関数 B である場合があります。その場合、B は関数 C を引数として受け入れ、実行すると別の関数 D を返すことができます。

于 2013-03-08T02:30:35.297 に答える
1

最初の行は、関数を参照するオブジェクトを作成しています。次のように参照します。

myFirstFunc(param);

ただし、次のように関数を返すため、別の関数に渡すことができます。

function mySecondFunction(func_param){}
mySecondFunction(myFirstFunc);

myFirstFunc2 行目は、次のように参照される関数を作成するだけです。

myFirstFunc(param);

また、宣言されている場所に応じてスコープが制限されます。他の関数の外部で宣言されている場合は、グローバル スコープに属します。ただし、別の関数内で関数を宣言できます。その関数のスコープは、内部で宣言された関数に限定されます。

function functionOne(){
    function functionTwo(){}; //only accessed via the functionOne scope!
}

最後の例では、オブジェクト パラメーターを介して参照される関数のインスタンスを作成しています。したがって、この:

function myFirstFunc(param){};

obj.myFirst = myFirstFunc(); //not right!
obj.myFirst = new myFirstFunc(); //right!

obj.myFirst('something here'); //now calling the function

関数のインスタンスを参照するオブジェクトがあるとします。ここで重要なのは、関数が変更されても、保存した参照obj.myFirstは変更されないということです。

@kevinは基本的に正しいですが、JSには関数しかありませんが、関数よりもメソッドに似た関数を作成できます。たとえば、次のようになります。

function player(){

    this.stats = {
        health: 0,
        mana: 0,

        get : function(){
            return this;
        },

        set : function( stats ){
            this.health = stats.health;
            this.mana = stats.mana;
        }  
}    

その後、 を呼び出すと、 、およびplayer.stats.get()の値が返されます。したがって、この例ではandをオブジェクトのメソッドと見なします。heathmanagetsetplayer.stats

于 2013-03-08T02:07:06.490 に答える