例如:
var myObj={
myValue="hola",
asMember=function(){ alert( this.myValue ); }
};
myObj.asMember(); // will work fine
var asGlobal=myObj.asMember; // global alias for that member function
asGlobal(); // won't work in javascript (will work in AS3, but i need js now)
所以问题是,我可以重写asMember
以便可以通过全局别名调用它而不提及myObj
吗?据我所知,如果我定义它:
asMember=function(){ alert( myObj.myValue ); }
它会起作用,但就我而言,提及myObj
即使在函数本身内也是不可接受的(因为myObj
可能会在以后重新分配,但asGlobal
不会改变,应该继续工作)
答案 0 :(得分:1)
要调用asGlobal
,您需要执行以下操作:
asGlobal.call(myObj);
ECMAScript 5将引入bind()
方法来强制执行函数的上下文。这将允许您执行以下操作:
var asGlobal = myObj.asMember.bind(myObj);
asGlobal();
但据我所知,目前的浏览器尚不支持bind()
。在此期间,您可能需要查看Prototype's bind实现,这与ECMAScript 5方法几乎完全相同。
答案 1 :(得分:0)
var asGlobal = function(){myObj.asMember();}
如果myObj更改为其他对象,则该函数将使用最新值。如果你不想这样,试试:
var asGlobal = function(o){return function(){o.asMember();}}(myObj);
答案 2 :(得分:0)
疑难杂症! 关闭做得很好
function myObj(){
var myValue="hola";
return{
asMember:function(){ alert( myValue ); },
anotherMemer:function(){/* ... */}
}
};
var temp=myObj();
var asGlobal=temp.asMember; // global alias for that member function
asGlobal();