0

私はJavaScriptのオブジェクトについて学んでおり、関数を使用してオブジェクトを構築し、それにメソッドを追加しています。明らかに、オブジェクトの firstName を変更するメソッドがありますが、行 this.changeName=changeName;は何をしますか?
正確に?これを削除したり、changeName 関数名を別の名前に変更したりすると、エラーが発生して何も表示されません。また、このコード行を削除するとエラーが発生するため、コードを実行するために不可欠なようですが、実際に何をするのかわかりません。

<script>

function person(firstName, lastName, age){
    this.firstName=firstName;
    this.lastName=lastName;
    this.age=age;
    this.changeName=changeName;

    function changeName(name){
        this.firstName=name;
    }
}
me = new person("Hazem", "Khadash", 18);
me.changeName("Bashar");
document.write(me.firstName);

コードを理解すると、me が作成され、changeMe() 関数がメソッドとして呼び出され、person.lastName が画面にレンダリングされます。

ありがとう。

4

5 に答える 5

2

changeNameの一部としてアクセス可能にしていますperson。露出していると考えてくださいchangeName

それがなければ、 の範囲外に存在me.changeNameしなくなるため、実行できません。me.changeNameperson

于 2013-08-28T20:07:53.337 に答える
1
function person(firstName, lastName, age) {
    ...

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

function 内でのみ使用できる関数を作成しますperson。あなたが見つけたようにme.changeName(…)、関数は外部からアクセスできないため、それだけでは機能しませんperson

this.changeName = changeName

その関数を関数の外部からアクセスできるようにして、後でperson呼び出すことができるようにしme.changeNameます。

this.changeName = changeNameではなくであることに注意してくださいthis.changeName = changeName()。括弧を使用すると、関数が呼び出され、その出力がthis.changeName;に割り当てられます。括弧なしで、関数への参照をに割り当てます。changeNamethis.changeName

これを次のように変更すると、同等になります。

function person(firstName, lastName, age) {
    ...
    this.changeName = function(name){
        this.firstName=name;
    }
}

person「クラス」を記述する最良の方法は、おそらく次のようになります。

function person(firstName, lastName, age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
}

person.prototype.changeName = function changeName(name){
    this.firstName = name;
};
于 2013-08-28T20:09:49.517 に答える
1

すでに Javascript で聞いたことがあるかもしれませんが、すべてがオブジェクトです。あなたが機能人の中にいるように、あなたは「対象の中にいる」人でもあります。したがって、これはオブジェクトを指します。この関数内でネストされた関数を宣言すると、関数のコンテキストでのみ表示され、他の場所では表示されなくなります。それを外の世界で利用できるようにするには、それをオブジェクト フィールドに割り当てる必要があります。そうしないと、外部から呼び出すことができません。オブジェクト指向プログラミングに精通している場合は、クラスのメソッドのように考えることができます (JS には実際のクラスはありません)。

同じことは次のようになります。

function person(firstName, lastName, age){
  this.firstName=firstName;
  this.lastName=lastName;
  this.age=age;
  this.changeName = function(name){
    this.firstName=name;
  }
}

person のインスタンスのスコープ内でこのメソッドを呼び出す場合。「これ」は常にその特定のインスタンスを指します。

要約すると次のようになります。

this.changeName=changeName; -> まだ定義されていないローカル オブジェクト changeName を object-field changeName に割り当てます

function changeName(name) -> ローカル オブジェクト changeName を関数として宣言します。

覚えておいてください-JavaScriptでは、すべてがオブジェクト関数、変数、配列です...

于 2013-08-28T20:24:35.363 に答える
0

JavaScript では、関数を数値または文字列として変数に割り当てることができます。この特定のケースでは、personという名前のプロパティchangeNameに function が割り当てられていますchangeName。この代入により、この問題を介してchangeName関数を呼び出すことができます ( me.changeName("Bashar");)

于 2013-08-28T20:08:48.097 に答える
0

そのコード行がなくても、 person オブジェクトのスコープから changeName(name) 関数を呼び出すことができます。しかし、そのコード行を使用すると、スコープのからその関数を呼び出すことができます。

于 2013-08-28T20:12:30.693 に答える