js call函数
在分析jquery源码时,遇到each函数体里的一段代码:
1: if ( isObj ) {
2: for ( name in object ) {3: if ( callback.call( object[ name ], name, object[ name ] ) === false ) {4: break;
5: }6: }7: } else {
8: for ( ; i < length; ) {9: if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {10: break;
11: }12: }13: }
对js中的call理解不深,便写了一段测试代码:
1: function each( object, callback ) {
2: if ( Array.isArray( object ) ) {3: for ( var i = 0; i < object.length; i++ ) {4: // callback.call( null, i, object[i] );
5: callback( i, object[i] );6: }7: }8: }
两个函数都可以得到正确结果,那为什么还要使用call方法,使用call方法的好处在哪里。于是在MDN上找到一段代码示例,经常认真分析,让我对call的认识更深一层。
1: function Product(name, price) {2: this.name = name;3: this.price = price;
4: return this;5: }6:7: function Food(name, price) {8: Product.call(this, name, price);9: this.category = 'food';
10: }11: Food.prototype = new Product();12:13: function Toy(name, price) {14: Product.call(this, name, price);15: this.category = 'toy';
16: }17: Toy.prototype = new Product();18:19: var cheese = new Food('feta', 5);20: var fun = new Toy('robot', 40);
是不是非常像C#中的继承关系呀,通过查看console,实例fun的属性都得到赋值。说明在调用call时,Product中的this就变成了fun,神奇吧,而C#中的函数就只能允许所在类调用,绝对不许为他所用!
PS:我一般习惯性地查MDN,网友franky建议查ES5,Mark!
ES5官方文档:http://es5.github.com/
MDN:https://developer.mozilla.org
---end
作者:清流鱼
出处:http://www.cnblogs.com/qingliuyu/
新浪微博:http://weibo.com/qingliuyu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗