1

この行の changeName の後に () がない理由がわかりませんthis.chngName = changeName;。私のロジックはthis.chngName、関数の戻り値に割り当てられ、関数の最後に () があるというものです。回答ありがとうございます。

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

    this.chngName = changeName;

    function changeName(name) {
        this.lastname = name;
    }
}

myMother = new person("Sally", "Rally", 48, "green");
myMother.chngName("Doe");
document.write(myMother.lastname);
4

2 に答える 2

3

彼らがそこで行っているのは、関数を呼び出さずに参照することです。

var x = foo;   // Assign the function foo to x
var y = foo(); // Call foo and assign its *return value* to y

JavaScript では、関数はオブジェクトです。適切なオブジェクト。そのため、それらへの参照を渡すことができます。

より明確にするために:JavaScriptでは、括弧で関数を呼び出すと違いがありますか?

于 2013-09-20T13:27:41.783 に答える
0

関数は呼び出されるのではなく、割り当てられます。myMother.chngName("Doe");関数が別の関数を返さないため、それ以外の場合は機能しません。の戻り値を代入してもchangeName()意味がありません。何も返さないためです (したがって、自動的に が返されますundefined)。

より詳細な説明: 関数は JavaScript の第一級オブジェクトです。これは、(他のいくつかのものに加えて) 他の値/オブジェクトのように渡され、任意の変数に割り当てられることを意味します。この場合、コンストラクター関数changeNameのスコープに対してローカルpersonな関数がオブジェクトに割り当てられ、外部から (実際には、によって作成されたオブジェクトnew person()が使用可能な任意の場所から) 使用できるようになります。

于 2013-09-20T13:23:30.960 に答える