2016-04-18 11 views
0

console.logに「Alex」という名前が表示されるのはなぜですか?なぜ "David"という名前と連結しないのですか?これです。正しい名前が表示されない

var Obj = function() { 
    this.name = "Alex"; 
    var that = {}; 
    that.name = "David"; 
    var name = this.name + " && " + that.name; 
    return name; 
} 

var o = new Obj(); 
console.log(o.name); 

答えて

1

以下のようにそれを使用します。

var Obj = function() { 
    this.name = "Alex"; 
    var that = {}; 
    that.name = "David"; 
    this.objName = this.name + " && " + that.name; 
    //return name; 
} 

var o = new Obj(); 
console(o.objName); 

またはこの、あなたがname

var Obj = function() { 
    this.name = "Alex"; 
    var that = {}; 
    that.name = "David"; 
    this.name = this.name + " && " + that.name; 
    //return name; 
} 

var o = new Obj(); 
console(o.name); 
+0

_「名前の衝突を持つ:戻り値nameがタイプStringであるので、(そう.name = "Alex"thisに割り当てられたすべてのプロパティが含まれている、(コンストラクタとして呼び出された場合)は単に無視されますし、代わりにオブジェクトが返されますローカル変数 "_矛盾はどこにありますか? – zeroflagL

+0

矛盾はありませんが、o.name ..を呼び出すと、変数名ではなくオブジェクトのthis.nameが返されます。 – Phoenician

0

を上書きしたい場合は、o.nameを呼び出すと、オブジェクトのthis.nameを返します。宣言された変数( "name")ではありません。

var Obj = function() { 
    this.name = "Alex"; 
    var that = {}; 
    that.name = "David"; 
    this.name = this.name + " && " + that.name; 
} 

var o = new Obj(); 
console.log(o.name); 
+0

正しくはありません。 「返品名」役に立たないです。 –

+0

あなたは正しいです..私はそれを削除することを忘れて..ありがとう:) – Phoenician

0

それは、新しいキーワードに問題があります:あなたはこれを試してみてくださいもう一度

をthis.name値を更新する必要があります。

1つの解決方法は、varキーワードを取り除き、すべての名前をthis.nameに置き換えることです。

または、新しいキーワードを削除するだけです。これはあなたのオブジェクトがこれを返すように強制するためです。新しいキーワードを使用している場合

これは何が起こるかです:

var Foo = fuction(){ 
 
    var obj = Object.create(Foo.prototype); 
 
    
 
    //your Foo code 
 
    
 
    return obj; 
 
    
 
}

+2

_ "またはもっと単純に新しいキーワードを取り除く" _それは動作しません。コードの残りの部分も変更する必要があります。 – zeroflagL

0

var Obj = function() { this.name = "Alex"; var that = {}; that.name = "David"; this.name = this.name + " && " + that.name; return name; } var o = new Obj(); console.log(o.name);

2

あなたは常に、new演算子を使用してコンストラクタとしてObjを起動するとオブジェクトが返されます。定義された戻り値の型がObjectでない場合は、無視されます。 Obj内では、生成されるオブジェクトはthisによって参照されます。つまり、thisに割り当てられたすべてのプロパティは、生成された各オブジェクトのプロパティになります。

通常の関数としてObjを呼び出すと、定義された戻り値が返され、thisは無視されます。

nameおよびthatは、スコープとしてObjのローカル変数です。それらはthisに割り当てられていないため、返されるオブジェクトの一部ではありません。

var Obj = function() { 
    var name = "David" // local variable 
    this.name = "Alex" // name property of each newly generated object 
    return name; 
} 

var o = new Obj(); // invoke function as a constructor 
var p = Obj(); // normal function invocation 

console.log(o); // {name: "Alex"} 
console.log(p); // "David" 
関連する問題