Javascript 在实例化期间引用属性
我试图用javascript创建一个对象,允许在事件发生时调用函数。在我的程序中,当一个事件发生时(由keya标识),相应的函数被调用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
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));