从内部范围访问外部范围

时间:2016-03-08 21:42:24

标签: javascript scope

我的类型看起来像这样:

var x = function(){
    this.y = function(){

    }

    this.z = function(){
        ...
        this.A = function(){
            CALLING POINT
        }
    }
}

从呼叫点开始,我试图调用函数this.y.我不需要传递任何参数,但是当我从这里设置一些东西时,我需要调用this.y.

这可能吗?我可以将额外的参数传递给函数以使其成为可能。

3 个答案:

答案 0 :(得分:8)

  

这可能吗?

是的,您可以将this引用分配给另一个变量,然后在其上调用函数y

this.z = function() {
    var self = this;
    this.A = function() {
        self.y();
    }
}

答案 1 :(得分:3)

带有bind的版本,基本上会为对象添加新方法a

var X = function () {
    this.y = function () {
        document.write('y<br>');
    }

    this.z = function () {
        document.write('z<br>');
        this.a = function () {
            document.write('a<br>');
            this.y();
        }
    }.bind(this);
};

var x = new X;
//x.a(); // does not exist
x.z();   // z
x.a();   // a y

保存内部this的工作示例。

var X = function () {
    var that = this; // <--

    this.y = function () {
        document.write('y<br>');
    }

    this.Z = function () {
        document.write('Z<br>');
        this.a = function () {
            document.write('a<br>');
            that.y();
        }
    }
}

var x = new X,
    z = new x.Z; // Z

z.a(); // a y

答案 2 :(得分:-1)

您不能,因为this.y()不在this.A()所在的范围内。如果您将this.y()设置为全局函数y,则可以:

var y = function() {};
var x = function() {
    this.y = y;
    this.z = function() {
       ...
       this.A = function() {
           this.y(); // will be successful in executing because this.y is set to the y function.
       };
    }
};