You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用bind创建偏函数时,如何正确传递对象自身属性?

问题原因

在对象字面量初始化阶段,this并不指向正在创建的admin对象,而是指向当前代码的全局上下文(浏览器中是window,Node.js环境中是global,严格模式下为undefined),所以this.role无法获取到admin的role属性值,最终导致sendMail的from参数为undefined。

解决方案

以下是几种可行的解决方式:

方式一:使用getter方法

通过getter延迟绑定操作,当访问admin.sendMail时,this会正确指向admin对象:

function sendMail(from, to, content) {
    console.log(`Sending email from ${from} to ${to} with message as ${content}`);
}

let admin = {
    role: `admin`,
    get sendMail() {
        return sendMail.bind(this, this.role);
    }
}
admin.sendMail(`all`, `Reboot in 15 mins`);

每次访问admin.sendMail都会返回一个新的绑定后的函数,确保from参数始终是当前admin.role的值。

方式二:对象创建后再绑定

先完成admin对象的初始化,再对sendMail进行绑定操作:

function sendMail(from, to, content) {
    console.log(`Sending email from ${from} to ${to} with message as ${content}`);
}

let admin = {
    role: `admin`,
}
admin.sendMail = sendMail.bind(admin, admin.role);
admin.sendMail(`all`, `Reboot in 15 mins`);

这种方式下,admin已经创建完成,直接用admin作为bind的上下文,能正确获取admin.role的值。

方式三:直接封装调用

如果不需要偏函数的特性,也可以直接封装一个函数调用sendMail:

function sendMail(from, to, content) {
    console.log(`Sending email from ${from} to ${to} with message as ${content}`);
}

let admin = {
    role: `admin`,
    sendMail(to, content) {
        sendMail(this.role, to, content);
    }
}
admin.sendMail(`all`, `Reboot in 15 mins`);

这种方式更直观,调用时this指向admin,能直接获取role属性。


内容的提问来源于stack exchange,提问作者Pramod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:05:23