品味prototype1.6 新加入方法
时间:2007-11-13
来源:互联网
回味一下bind方法
当初刚接触prototype时最疑惑的地方是Function中bind方法
代码:
Function.prototype.bind = function() {var __method = this;//获得当前方法的引用 (run.bind(this); 就是run)
var args = $A(arguments);
//获得传递给bind方法的参数 并转化为数组
//应用run.bind(this,1,2,3) args就是[(this对象的引用),1,2,3]
var object = args.shift();
//就是把(this对象的引用)提取出来
return function() {
return __method.apply(object, args.concat($A(arguments)));
//这里的arguments又是另外一个了
//比如 var kk = run.bind(this,1,2,3);
// kk(4,5);这里的arguments就是[4,5]
}
}
对于初学者,我教你这样理解
代码:
function run(){if(this.timer){
alert('获得了this对象');
return;
}
this.timer = setTimeout(run.bind(this),1000);
//问题: run你不加bind(this)的话会怎么样
//1秒后由setTimeout调用的这个函数,如果不bind(this)的话 函数中this这个对像会丢失
// 也就永远不会alert('获得了this对象'); 而且进入每隔1秒重复调用run()死循环
// run.bind(this)() = run.apply(this)
}
新方法
- 延时执行
代码:
Function.prototype.delay=function() {
var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
return window.setTimeout(function() {
return __method.apply(__method, args);
}, timeout);
}
mootools的还可以绑定一个闭包(对象),而他仅是普通function的延时执行,如果那个function里面如果含有this的话,将得不到引用
代码:
var obj = function(){
this.kk = '你得到我了';
(function(){
alert(this.kk)// prototype 中会空值
}).delay(1,1,2,3);//延时一秒执行,传递参数1,2,3
}
new obj();
- methodize方法
代码:
Function.prototype.methodize=function() {
if (this._methodized) return this._methodized;
var __method = this;
return this._methodized = function() {
return __method.apply(null, [this].concat($A(arguments)));
};
}
先理解、消化了再说
代码:
var obj = function(){
var kk = (function(){
alert(arguments[0]);// IE中打印object
alert(arguments[1]);// 这才打印第一个参数
}).methodize();//methodize方法不接受参数
kk('第一个参数',2,3);
}
new obj();
- argumentNames方法
代码:
Function.prototype.argumentNames=function() {var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
return names.length == 1 && !names[0] ? [] : names;
};
还有curry,wrap方法以后再续
不支持偶的观点望批评指正
[ 本帖最后由 muqiao 于 2007-11-13 03:21 编辑 ]
作者: muqiao 发布时间: 2007-11-13

作者: 特蓝克斯 发布时间: 2007-11-13
这里改变下对delay方法的看法
今天对mootools很多东西感到恶心,还是prototype的delay最实际
mootools delay方法有个bind参数
造成每个方法都要用call/apply方法调用 不知道call/apply效率到底有多高
先不谈效率
假如用户函数没有必要bind,那也得bind,搞得call/apply很受重视
真的bind时 prototype可以先将函数bind 再delay
我感觉这样更好
作者: muqiao 发布时间: 2007-11-14

作者: 天使的魔鬼 发布时间: 2007-11-14

作者: luzhou 发布时间: 2007-11-14

作者: chemila65 发布时间: 2008-02-12
作者: smallwl 发布时间: 2008-02-13
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28