Javascript 在实例化期间引用属性

Javascript 在实例化期间引用属性,javascript,Javascript,我试图用javascript创建一个对象,允许在事件发生时调用函数。在我的程序中,当一个事件发生时(由keya标识),相应的函数被调用 function Foo(dict){ this.add(dict); this.biz = 'world'; }; //add a dictionary to the object Foo.prototype.add = function(dict){ for(var k in dict){ //duplicate ke

我试图用javascript创建一个对象,允许在事件发生时调用函数。在我的程序中,当一个事件发生时(由keya标识),相应的函数被调用

function Foo(dict){
   this.add(dict);

   this.biz = 'world';
};

//add a dictionary to the object
Foo.prototype.add = function(dict){
    for(var k in dict){
        //duplicate key check not needed
        this[k] = function(){
            dict[k]();
        }

        this[k].that = this;
    }
};

//call an event
Foo.prototype.call = function(event){
    this[event]();
};

var foo = new Foo(
{
    //'event key':function(){...}
    //Cannot read property 'biz' of undefined
    'test':function(){alert('hello ' + this.that.biz);}
});

foo.call('test'); //expected output: hello world

有没有可能建立一个系统,让一个匿名函数的内容引用foo的属性,最好是在纯js中

首先,这是您的代码

function Foo(dict) {
    this.add(dict);
    this.biz = 'world';
};

//add a dictionary to the object
Foo.prototype.add = function(dict) {
    for (var k in dict) {
        // duplicate key check not needed
        this[k] = dict[k];
    }
};

//call an event
Foo.prototype.execute = function(event) {
    this[event]();
};

var foo = new Foo({
    'test': function() {
        alert('hello ' + this.biz);
    }
});

// here this will be pointing to object foo
// that is the instance of Foo and has property baz
foo.execute('test');
如果我理解你的第二个问题,答案是肯定的。您可以将对象传递给匿名函数(顺便说一句,这是依赖项注入)


这个。那个
没有定义
this.biz
应该是。也不要原型化
.call
,因为它在javascript中是一个保留的方法。所以您希望将匿名函数的作用域更改为包装它的外部函数?也许?
(function(fooLikeObject) {
    ...
    ...fooLikeObject['test']();
    ...
}(foo));