重写Function.prototype.bind

简介: 重写Function.prototype.bind

正文


bind 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。


Usage: function.bind(thisArg [, arg1 [, arg2 [, ...]]])


参数 thisArg


  • 如果使用 new 运算符构造绑定函数,则忽略该值。
  • 当使用 bind 在 setTimeout 中创建一个函数(作为回调提供)时,作为 thisArg 传递的任何原始值都将转换为 object。
  • 如果 bind 函数的参数列表为空,执行作用域的 this 将被视为新函数的 thisArg。


参数 arg1、arg2...


当目标函数被调用时,被预置入绑定函数的参数列表中的参数。


返回值


返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。


重写 bind 方法


var point = {
    x: 0,
    y: 0,
    z: 0
}
// 构造函数
function Point(x, y, z) {
    console.log(this.x, x, y, z)
    console.log('')
}
// 函数名写成 bindy,是为了方便与原生 bind 方法对比
Function.prototype.bindy = function(context) {
    var _this = this;
    var args = Array.prototype.slice.call(arguments, 1);
    var tempFn = function() {};
    var fn = function() {
        var thatArgs = Array.prototype.slice.call(arguments)
        _this.apply(this instanceof _this ? this : context, args.concat(thatArgs))
    }
    // 圣杯模式
    tempFn.prototype = this.prototype;
    fn.prototype = new tempFn();
    return fn;   
}
// bind 可以在调用的时候传入参数
Point.bind(point, 1, 2)(3);     // output: 0 1 2 3
Point.bindy(point, 4, 5)(6);    // output: 0 4 5 6
// 使用 new 去构造时,bind 绑定的 this 最终会执行构造函数
let p = Point.bind(point);
let p2 = Point.bindy(point);
new p(3, 3, 3);                 // output: undefined 3 3 3
new p2(4, 4, 4);                // output: undefined 4 4 4


目录
相关文章
|
数据库 开发者 数据库管理
ACID原则-大道至简,你不觉得很秒嘛?
ACID原则-大道至简,你不觉得很秒嘛?
404 0
|
编解码 Android开发
android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 分辨率对应DPI"HVGA    mdpi" 480*320 "WVGA   hdpi ""FWVGA hdpi ""QHD      hdpi ""720P     xhdpi""1080P   xxhdpi " 4:3VG...
|
6天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
5天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
5天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
1080 4
|
8天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
677 2