-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

一种常见的模式是显式声明一个包含对对象的引用的局部变量。这通常称为self_this。好处是无论其他代码做什么,您的函数将始终绑定到您的对象。在下面的示例中,我们看到它this.prop并不总是正确绑定。但是,通过仅使用self来引用对象,我们可以避免与此相关的所有问题。

JavaScript 库经常使用applycall以我们不希望的方式绑定我们的函数。

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 回答