2016-03-25 16 views
-2

JavaScriptオブジェクトのプロパティを更新

function person(f, l) { 
 
    this.firstName = f; 
 
    this.lastName = l; 
 
    this.changeName = function (str) { 
 
    this.lastName = str; } 
 
    this.getInitials = function() { 
 
     {return f[0] + l[0]} }} 
 
    
 
var foo = new person("Joe","Smith"); 
 
foo.changeName("Brown"); 
 
alert(foo.firstName + " " + foo.lastName); 
 
alert(foo.getInitials())

最初alert()私は、すなわち「ジョー・ブラウン」、それを期待するもの与えます。しかし、2番目のものは「JS」です。

ここでは何が起こっていますか? foo.lastNameの場合は、「ブラウン」はJSではなくJBと表示すべきですか?

答えて

-1

this.lastNamethis.firstNameを使用してみてください:

this.getInitials = function() { 
    { 
    return this.firstName[0] + this.lastName[0] 
    } 
} 
0

変更:

this.getInitials = function() { 
    {return f[0] + l[0]} 
} 

へ:

あなたはPersonに渡されたパラメータの最初の文字を返します(f/l) (新しい)名前(this.firstName/this.lastName)を格納する実際の変数の代わりに、

また、returnをラップした余分な{}ブロックは意味をなさない。私はそれを削除した。

ここでの作業の抜粋です:

function person(f, l) { 
 
    this.firstName = f; 
 
    this.lastName = l; 
 
    this.changeName = function (str) { 
 
     this.lastName = str; 
 
    } 
 
    this.getInitials = function() { 
 
     return this.firstName[0] + this.lastName[0]; 
 
    } 
 
} 
 

 
var foo = new person("Joe","Smith"); 
 
foo.changeName("Brown"); 
 

 
alert(foo.firstName + " " + foo.lastName); 
 
alert(foo.getInitials())

0

function person(f, l) { 
 
     this.firstName = f; 
 
     this.lastName = l; 
 
     this.changeName = function(str) { 
 
     this.lastName = str; 
 
     } 
 
     this.getInitials = function() { 
 
     //problem here, you are showing variables that initialize class 
 
     //return f[0] + l[0]; 
 
     //changeName doesn't affect argument variables, only class vars 
 
     //so you have to use class vars in this func 
 
     return this.firstName[0] + this.lastName[0]; 
 
     } 
 
    } 
 

 
    var foo = new person("Joe", "Smith"); 
 
    foo.changeName("Brown"); 
 
    alert(foo.firstName + " " + foo.lastName); 
 
    alert(foo.getInitials())

0

ここでの問題は、あなたが実際に「引数の元の値、あなたの入力を取得しているということです「f」および「l」を含む。 this.getInitialsメソッドにアクセスするときは、fとlではなくthis.firstNamethis.lastNameを使用します。

したがって、正しく更新するには、方法が{return this.firstName[0] + this.lastName[0]}である必要があります。

+0

'getInitials'はゲッターです。それは何も変わらない。 – Cerbrus

+0

申し訳ございませんが、元のコメントは不明でした。私は彼が更新された値ではなく元の値 'f'と 'l'(changeNameによって変更されない)を取得していると言っていました。 – David

関連する問題