-1

ググの日。

var obj = new Foo("start");   
Foo = function(some){

            this.first = function(){
                alert("First");
                $(".clazz").click($.proxy(this.second,this));
            };

            this.second = function(){
               $(".clazz").append("<span>Second</span>");
               //this.out() // Problemb with called a method "this.out()"
            };

            this.out = function(){
                $(".clazz").append("<a>Out</a>");
                // Code
            };

            this.constructor = function(some){
                this.first();
            };
            this.constructor(some);
        };

メソッド「this.second」からメソッド「this.out」を呼び出す方法は?

jsfiddle

4

1 に答える 1

2

一般的なパターンの 1 つは、オブジェクトへの参照を含むローカル変数を明示的に宣言することです。これは通常、selfまたはと呼ばれます_this。利点は、他のコードが何を行っても、関数が常にオブジェクトにバインドされることです。this.prop以下の例では、常に正しくバインドされていないことがわかります。ただし、selfオブジェクトを参照するためだけに使用することで、これに関するすべての問題を回避できます。

JavaScript ライブラリは、多くの場合、望ましくない方法で関数をバインドする方法でapplyorを使用します。call

function Foo(arg1){
    var self = this;
    self.prop = arg1;

    self.first = function(){
    };

    self.second = function(){
       alert("this.prop = " + this.out() + "\n" + // 2 (baz.prop)
             "self.prop = " + self.out() + "\n"); // 1 (bar.prop)
    };

    self.out = function(){
           return this.prop; // Depends on the context, we should use self.prop
    };
}

var bar = new Foo(1);
var baz = new Foo(2);
bar.second.apply(baz);

ここにフィドルがあります

于 2013-07-08T20:38:12.193 に答える