2016-09-13 6 views
-1
function foo(){ 
    this.a = 123; 

    b(); 

    function b(){ 
     alert(this.a);//undefined 
    } 
} 


var o = new foo(); 
o.a = 456; 

私はjsのOOPに新しいよ、私はプライベートメソッド 'B(){}'javascriptのOOPのプライベートメソッドへのアクセスパブリックプロパティ

からパブリックプロパティにアクセスしようとするが、それは未定義

を示し私はまた、このプロパティを外部から変更したいと思いますが、プロパティ値を変更する前にオブジェクトが最初に構築されると考えてください。

+0

JavaScriptを学びたい人は、この男はすばらしいビデオを持っています。ここで確認してください:https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q –

+0

あなたはコンストラクタなどの内部で関数を宣言しようとしていたようです。 – brianxautumn

答えて

1

prototypejavascriptにクラスとそのメソッドを作成するために使用されます。私はネイティブであなたの例を変更しましたjavacript

function foo(){ 
    this.a = 123; 

    this.b(); 
} 

foo.prototype.b = function b(){ 
    alert(this.a); 
} 

var o = new foo(); 
o.a = 456; 
1

ところで、thisは、関数を定義する場所と関数の呼び出し方法とは関係ありません。

あなたの場合、関数を通常の関数、つまりthisがグローバルオブジェクト(厳密モードではundefined)にバインドされるように呼び出すことになります。

1

私はそれが読みやすいですのでECMA6構文であなたのためにそれを書き直して、それを修正:

class foo { 
    constructor() { 
    this.a = 123; 
    this.b(); 
    } 

    b() { 
    alert(this.a); 
    } 
} 


var o = new foo(); 
o.a = 456; 
関連する問題