2017-11-12 6 views
0

私はthis.nameobj.nameと同じでない理由を理解できません。基本的にはこの場合、thiswindowオブジェクトであり、objオブジェクトではありません。以下のコードでは、this.nameが... obj.nameMDNパーjavascript - なぜ 'this'がオブジェクトを参照していないのですか?以下のコード

function createNewPerson(name) { 
    var obj = {}; 
    obj.name = name; 
    alert(this.name); 
    return obj; 
} 
+1

なぜあなたはそれをどう思いますか? 'obj'は単なるオブジェクトです(これがインスタンス上のメソッドとして呼び出されたとしても' this'は 'obj'を参照しません)。基本的な理解のために、このキーワードを読んでください。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this – rgthree

+0

参照:https://stackoverflow.com/help/someone-answers – c0der

答えて

1

インスタンス化されます:関数内

を、この値は、関数が呼び出される であるかに依存します。次のコードはstrictモードではないので、 の値がこの呼び出しで設定されていないため、これはデフォルトでブラウザのウィンドウである グローバルオブジェクトになります。

したがって、objではなく、thisがWindowオブジェクトとして表示されます。あなたは、例えば、手動での結合を介して、あなたの関数内objコンテキストを取得することがあります。

function createNewPerson(name) { 
    console.log(this.name); // Hello 
    console.log(name); // World 
} 

var obj = {}; 
obj.name = 'Hello'; 
var salva = createNewPerson.apply(obj, ['World']); 

しかし、私が理解できるよう、あなたが本当に、必要、機能cunstructorあるとnewオペレータ経由してオブジェクトをインスタンス化:

function createNewPerson(name) { 
    this.name = name; 
} 
var salva = new createNewPerson('Salva'); 
console.log(salva.name); // Salva 
関連する問題