在我的理解,this是指向的调用方法的当前对象,应该是一个对象。但看一下下面的代码
Function.prototype.apply = function(object,parameters) {
var f = this; //这里 f 是个函数对象还是方法变量? 到底指向什么呢?
var o = object || window;
var args = parameters ||[]; o._$_apply_$_ = f; //对 f 的引用
var stringArgs = [];
for(var i=0;i<args.length;i++) {
stringArgs[i] = "args["+i+"]";
}
var arglist = stringArgs.join(","); var methodcall = "o._$_apply_$_("+arglist+");"; //如果 f 是个对象的话,这里怎么能够执行呢?
var result = eval(methodcall);
delete o._$_apply_$_;
return result;
}
这里的 this 和 f 怎么理解呢? 它们指向什么呢?
Function.prototype.apply = function(object,parameters) {
var f = this; //这里 f 是个函数对象还是方法变量? 到底指向什么呢?
var o = object || window;
var args = parameters ||[]; o._$_apply_$_ = f; //对 f 的引用
var stringArgs = [];
for(var i=0;i<args.length;i++) {
stringArgs[i] = "args["+i+"]";
}
var arglist = stringArgs.join(","); var methodcall = "o._$_apply_$_("+arglist+");"; //如果 f 是个对象的话,这里怎么能够执行呢?
var result = eval(methodcall);
delete o._$_apply_$_;
return result;
}
这里的 this 和 f 怎么理解呢? 它们指向什么呢?
解决方案 »
- 帮忙看看 下面这段代码是否有不一样的写法!!!
- 使用jquery的maphilight插件,在fire fox下可以但是在IE下不行(在线等,哪位达人帮帮忙啊)
- prototype和json都导入后不能发送请求了
- 使用“HtmlEditor”文本编辑器,判断内容是否为空出现点小问题,请教一下。
- 如何使window.open打开的弹出窗口最大化并且不能拖动弹出窗口
- object出现问题啦!高手帮忙!
- Extjs奇怪问题:SCRIPT5007: 无法获取未定义或 null 引用的属性“appendChild”
- 请kisslan(郁忧的曼陀萝)接分,多谢帮助!
- 如何在IE中输入网址此页面全屏显示?
- ajax +servlet+out.println() 返回swf播放器的js代码,然后inHtml加到页面上
- web开发的程序进行自动化测试使用什么测试工具较好
- 如何获得填写后的value=1的值????
自己看看·
var f = this; //这里 f 是个函数对象还是方法变量? 到底指向什么呢?
var o = object || window;
var args = parameters ||[]; o._$_apply_$_ = f; //对 f 的引用
var stringArgs = [];
for(var i=0;i <args.length;i++) {
stringArgs[i] =args[i];
}
var arglist = stringArgs.join(","); result=o._$_apply_$_(arglist);; //如果 f 是个对象的话,这里怎么能够执行呢?
;
return result;
}
function aa(me){alert(me)};
(function bb(){aa.apply(null,arguments);})("az","ay");
Function.prototype.apply = function(object,parameters) {
var f = this; // 指向的就是当前调用的对象 //eg function test(){} test.apply(...) 这里f就是指test这个函数,在js中,函数也是对象
var o = object || window;
var args = parameters ||[]; o._$_apply_$_ = f; //对 f 的引用
var stringArgs = [];
for(var i=0;i <args.length;i++) {
stringArgs[i] = "args["+i+"]";
}
var arglist = stringArgs.join(","); var methodcall = "o._$_apply_$_("+arglist+");"; //f指向当前调用的对象(函数),....eval用法:eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它
var result = eval(methodcall);
delete o._$_apply_$_;
return result;
}