0

閉鎖のこの部分についてはよく読んでいますが、まだ混乱しています(サイトでもここにあります)。ここからコードを取得しました: http://www.crockford.com/javascript/private.html

So what is the different between this:
function Container(param) {
    this.member = param;
}
...And this -
function Container(param) {
    var member = param;
     // and also in case it's without "var", I.e. global
}

それぞれのケースで obj を作成しているときに何が起こるか説明してください -

var myContainer = new Container('abc');

また、オブジェクトからパラメータへのアクセスの違いは何ですか? また、パラメーターとしての関数戻り関数の例を挙げていただけますか?

どうもありがとう!

4

2 に答える 2

0

関数 Test で、変数 obj1 を new Test で宣言するとき。「Test」と呼ばれるコンストラクター関数を介して作成されています。

このプロセスは、通常の方法で関数を呼び出すようなものです。もちろん、ローカル変数を「名前」にします。「this.getName」と呼ばれる関数式を宣言したとき、それは関数「Test」への式を意味します。

しかし、「新しいテスト」を呼び出すと、キー値呼び出し「getName:function{}」を持つオブジェクトが返されます。「obj1.getName」を呼び出すと、変数「name」が返されます。しかし、getName のローカル変数「name」が見つからないため、親のスコープを検索して、変数「name」があるかどうかを調べます。それを取得するか、単に「undefined」を返すまで停止しません。変数「name」をメモリに保持するために「引用符」を作成しますが、関数「getName」を介して取得できます。

これらすべてのために、関数「Test」でプライベート変数を作成します。:) これがお役に立てば幸いです。

于 2014-03-03T02:22:45.610 に答える
0

ここに私の意見があります: new を使用して関数を介してオブジェクトを作成する場合、var による初期変数はローカル変数です。

function Test(){
    var name = "John";
    this.getName = function(){
        return name;   
    }
}
var obj1 = new Test();
console.log(obj1.name);  //undefined
console.log(obj1.getName());  //John

つまり、変数を関数の外で直接読み取ることはできません。これは、Java や C++ のプライベート変数のようなものです。

しかし、this.name = "John" を使用すると、状況が異なります。

function Test2(){
    this.name = "John";
}
var obj2 = new Test2();
console.log(obj2.name)  //"John"

変数を直接読み取ることができます。これは、Java または C++ の「パブリック」変数のようなものです。

これがうまくいくことを願っています。: )

于 2014-03-01T03:07:30.373 に答える