2

メソッドや関数などを扱うときに代入演算子が何に使用されるかを理解するのに少し苦労しています。オブジェクトを定義するためのw3学校の例を次に示します

function person(firstname,lastname,age,eyecolor){
this.firstname=firstname;
this.eyecolor=eyecolor;

this.newlastname=newlastname;
}

これが実際の機能です(別の場所に配置)

function newlastname(new_lastname){
this.lastname=new_lastname;
}

JavaScript全体を通して、私にとっては非常に奇妙です、とあなたは言います

object.methodname = somefunctionname

それを概念化するのに役立つアイデアはありますか?

4

3 に答える 3

2

あなたの質問のコードは、実質的にこれと同じです:

function person(firstname, lastname, age, eyecolor) {
    this.firstname = firstname;
    this.eyecolor = eyecolor;

    //anonymous function assigned to newlastname property
    this.newlastname = function(new_lastname) {
        this.lastname = new_lastname;
    };
}

personコンストラクター関数です (new新しいインスタンスを作成するには、演算子を使用して呼び出します)。のすべてのインスタンスには、と のperson3 つのプロパティがあります。firstnameeyecolornewlastname

プロパティの値は関数であるため、newlastnameプロパティはメソッドです。そのメソッドを呼び出すと、personそれが呼び出されたインスタンスがプロパティを取得しlastnameます。

例えば:

var me = new person("James", "Allardice", 22, "Brown");
me.lastname; //undefined
me.newlastname("Something");
me.lastname; //Something

これが可能なのは、JavaScript では関数がオブジェクトであるためです。

于 2012-06-19T07:34:12.943 に答える
1

これは、javascript の優れた点です。関数はファーストクラスのオブジェクトです。これは、他の非関数型プログラミング言語とは異なり、それらを他の関数にパラメーターとして渡し、関数から返し、(例のように) 通常のプロパティのようにオブジェクトにアタッチできることを意味します。

これにより、(Web の) 非常に重要な非同期関数呼び出し (コールバック) のようなプログラミング パラダイムが可能になります。

于 2012-06-19T07:42:51.447 に答える
1

この言語機能はFirst-class functionsと呼ばれます。ウィキペディアの記事はかなり包括的です。

于 2012-06-19T07:35:06.470 に答える