如何访问对象外的“this”变量

时间:2016-12-17 22:02:17

标签: javascript scope

我正在制作一个js canvas插件,我创建了这个对象:

function MyObject(argument) {
   var self = this;

   var callback = argument.callback;

   this.onRequestAnimationFrame = function() {
       callback(self);
   }

   this.myFunction = function (){
       return false;
   }
}

我称之为

var customObject = new MyObject({
    callback: function(instanceClass){
       instanceClass.myFunction();
    }
})

问题是,我必须得到实例类并从中调用一个函数,但我从控制台得到“myFunction不是函数”。

2 个答案:

答案 0 :(得分:2)

您不能从对象外部访问“this”。

你写这个的方式,你需要实例化对象,此时myFunction将是对象的一个​​方法。

“this”不是变量,而是关键字。

function MyObject(argument) {
   var self = this;

   var callback = argument.callback;

   this.onRequestAnimationFrame = function() {
       callback(self);
   }

   this.myFunction = function (){
       return false;
   }
}

function callback (caller) {
    console.log(caller.myFunction());
};

var a = new MyObject({callback : callback});

答案 1 :(得分:0)

当我们进行构造函数调用时,如果我们没有返回任何对象,则函数返回一个'this'对象,该对象位于其词法范围内。

当你写这篇文章时,

var customObject = new MyObject({
    callback: function(instanceClass){
       instanceClass.myFunction();
    }
});

function MyObject返回'this'对象。

因此,我们可以调用'onRequestAnimationFrame'函数,该函数反过来调用回调。

customObject.onRequestAnimationFrame();

jsbin链接: http://jsbin.com/foxupakihi/edit?js,console