3

説明内の質問

function Parent(){
    this.alertParent(){
        alert("Parent alert");
    }

    function child(){
        // how can I call to this.alertParent() from here without passing any  
        // parameters?
    }
}
4

2 に答える 2

12

あなたの質問のタイトルは紛らわしいです。非公式な用語「親」関数は、むしろ呼び出し関数に使用されます。

あなたの場合、コンストラクター関数内に 2 つの関数があり、一方を他方から呼び出したいだけです。具体的には、「プライベート」メソッドから「パブリック」メソッドを呼び出す必要があります (JavaScript は可視性をサポートしておらず、これらは同じことを達成するための回避策であるため、これらの用語を引用符で囲みます)。

現在のインスタンスへの参照を保持するだけです。

function Parent(){
    var self = this;
    this.alertParent = function() {
        alert("Parent alert");
    }

    function child() {
        self.alertParent();
    }
}

child定義されているコンテキスト内のすべての変数を閉じるため、 へのアクセスとなりselfます。thisもちろん[MDN]を変更します。

クロージャーを作成する代わりに、[MDN]または[MDN ]を使用してインスタンスを明示的に に渡すこともできます。child.call() .apply()

したがって、関数定義はそのままです

function child() {
    this.alertParent();
}

関数を呼び出すときは、たとえば、それがインスタンスを参照しchild.call(this)ていることがわかっている場合は、それを呼び出しthisます(代わりにthis、他の変数にすることができます)。

于 2012-06-09T10:35:23.997 に答える
3

コードに構文エラーがあります。多分あなたはこれを意味します:

function Parent(){
    this.alertParent = function () {
        alert("Parent alert");
    };

    this.child = function () {
      this.alertParent();
    }
}
于 2012-06-09T10:22:22.570 に答える