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