0
var fn = function() {


    this.method1 = function() {

        return this.public;
    };


    this.method2 = function() {

        return {

            init: function() { return this.public; }
        }
    };


    fn.prototype.public = "method prototype";
};

オブジェクト fn を作成

var object = new fn();

object.method1() // "method prototype"

object.method2().init(); // undefined 

method2().init() 関数の this.public プロトタイプが実行され、未定義が返されますか?

プロトタイプに代わるものはありますか? ありがとうございました。

4

3 に答える 3

1

これには多くの間違いがあります。

しかし、あなたの特定の質問に対する直接的な答えは、呼び出しinitが undefined を返すということです。これは、参照先が参照しthisていると思われるインスタンスではなく、作成した内部オブジェクトへの参照であるためです。

この特定の問題を解決しようとするのをやめて、JavaScript のプロトタイプ継承の基本を学ぶことをお勧めします。

于 2012-10-02T10:30:41.777 に答える
1

この問題は、 の関数にthisバインドされている別のスコープに関連しているため、次のことを試してください。initmethod2()

this.method2 = function() {
    var self = this;      
    return {
        init: function() { return self.public; }
    }
};

それで

object.method2().init(); // return "method prototype"
于 2012-10-02T10:29:48.487 に答える
0

this関数内のthisは、プロパティを持たないinitによって返されるオブジェクトです。object.method2()public

于 2012-10-02T10:30:02.607 に答える