2
<script>
function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;

    this.changeName=changeName;

    function changeName(name)
    {
        this.lastname=name;
    }
}
myMother=new person("Sally","Rally",48,"green");
document.writeln(myMother.lastname + " is " + myMother.age + " years old.");

myMother.changeName("Doe");
document.writeln(myMother.lastname);
</script>

ここではまず、changeName() 関数本体を定義し、その関数をパラメーター [myMother.changeName("Doe");] で呼び出します。以前に学んだように、呼び出されたときに機能するはずです。

しかし、ここでなぜこの行が必要なのか (this.changeName=changeName)。document.writeln(myMother.lastname) を削除すると、このコマンドは機能しません。なぜこれが起こっているのか、なぜこの行 (this.changeName=changeName) が使用されているのか理解できませんでした...

問題を見つけるのを手伝ってください。私は JavaScript の初心者プログラマーなので、どのように JavaScript を上手に使うことができるか、または myselt をより良いプログラマーにするために従うべき方法を教えてください。ありがとうございました..

4

1 に答える 1

1

ドット表記を使用できるようにするには (myMother.changeName(name)の代わりに使用できるようにするにはchangeName(myMother, name))、関数をオブジェクトのプロパティとして設定する必要があります。this.changeName = changeName関数を作成中のオブジェクトのプロパティとして設定します。


より良い方法は、プロトタイプに一度設定することです。これにより、personコンストラクターから作成されるすべてのオブジェクトで使用できるようになります。

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

そうすれば、新しいオブジェクトを作成するたびに関数を再作成する必要がなくなります。

于 2013-06-26T23:42:49.853 に答える