6

JavaScriptチュートリアルを実行していて、それを完了することができます。しかし、問題は、行の1つが何をしているのか理解できないことです。関数がsetAge()あり、後でオブジェクトを作成した後、susanそのオブジェクトのプロパティの1つを関数の名前として設定しましたか?なぜこれが行われるのかわかりません。これを行わずに関数/メソッドを使用することはできませんか?

チュートリアルコード:

var setAge = function (newAge) {
  this.age = newAge;
};

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work?  

// here, update Susan's age to 35 using the method
susan.setAge(35); 
4

4 に答える 4

8

上記で定義された関数にsusanのプロパティを割り当てています。setAge

function (newAge) {
  this.age = newAge;
};

これは1つの引数を受け入れる関数です。がsusan.setAge(35);呼び出されるとthis、発信者を参照し、susan年齢を35に更新します。

混乱はsetAge2回使用されたためかもしれません。スーザンの関数は左側で定義され、右側はすでに定義されています。例えば:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

同じように動作します。setAge「再利用可能」でもあります:

harry = new Object();
harry.iAmThisOld = setAge;
harry.iAmThisOld(55);

デモ http://jsfiddle.net/7JbKY/2/

于 2012-06-09T19:37:35.050 に答える
0

スコープが可変であるために機能します。

最初のsetAge変数は単なる関数であり、次setAge(24) のように呼び出すことができます。function setAge(age) {this.age = age}

setAge変数を宣言し、その内容を関数に設定した後、この変数に別の変数を設定できます。オブジェクトで行っているのはこれだけです。記述後、susan.setAge = setAge;オブジェクトのsetAgeプロパティは、関数である前のsetAge変数と等しくなります。だから、あなたは呼び出すことができますsusan.setAge()

于 2012-06-09T19:37:12.057 に答える
0

コードで何が行われているのか見てみましょう-

var setAge = function (newAge) {
  this.age = newAge;
};

ここでは、オブジェクトの可変エージを関数の呼び出し中に指定されたものに変更する関数が定義されています。

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge;

ここでは、関数によって変更される事前定義された値をsusan.ageに設定し、関数の値を変数susan.mynewageisに設定して、他の場合に次回関数を使用できるようにします。

susan.mynewageis(35);

ここでは、関数を呼び出すときに指定されたsusan.ageの値を35に設定しています。

この回答を投稿するつもりでしたが、誤って送信ボタンを押して不完全な回答を投稿しました。

于 2012-06-09T20:14:14.123 に答える
-1

これは範囲と閉鎖の問題です。これに関する詳細については、この記事を読むことをお勧めします:http: //nesj.net/blog/2012/03/javascript-scope-and-closure/

于 2012-06-09T19:36:18.767 に答える