如何要判断一个运行中函数的 this 绑定

来自你不知道的JavaScript

如果要判断一个运行中函数的 this 绑定,就需要找到这个函数的直接调用位置。找到之后
就可以顺序应用下面这四条规则来判断 this 的绑定对象。

  1. 由new调用?绑定到新创建的对象。

  2. 由call或者apply(或者bind)调用?绑定到指定的对象。

  3. 由上下文对象调用?绑定到那个上下文对象。

  4. 默认:在严格模式下绑定到undefined,否则绑定到全局对象。
    一定要注意,有些调用可能在无意中使用默认绑定规则。如果想“更安全”地忽略 this 绑 定,你可以使用一个 DMZ 对象,比如 ø = Object.create(null),以保护全局对象。

ES6 中的箭头函数并不会使用四条标准的绑定规则,而是根据当前的词法作用域来决定 this,具体来说,箭头函数会继承外层函数调用的 this 绑定(无论 this 绑定到什么)。这 其实和 ES6 之前代码中的 self = this 机制一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
绑定焦点函数,您可以使用Qt的信号和槽机制来实现。具体步骤如下: 1. 在您的窗口类,声明一个函数来处理焦点变化事件。例如,我们可以在窗口类声明一个函数`onLineEditFocusChanged(bool)`。 2. 在窗口的构造函数或初始化函数,使用`QObject::connect()`函数将`QLineEdit`的`focusIn()`和`focusOut()`信号连接到槽函数。 下面是一个示例代码: ```cpp #include <QApplication> #include <QLineEdit> #include <QDebug> class MainWindow : public QWidget { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QWidget(parent) { lineEdit = new QLineEdit(this); // 连接焦点变化信号和槽 connect(lineEdit, &QLineEdit::focusIn, this, &MainWindow::onLineEditFocusChanged); connect(lineEdit, &QLineEdit::focusOut, this, &MainWindow::onLineEditFocusChanged); } private slots: void onLineEditFocusChanged(bool hasFocus) { if (hasFocus) { qDebug() << "LineEdit has gained focus"; // 在获得焦点时执行相应的操作 } else { qDebug() << "LineEdit has lost focus"; // 在失去焦点时执行相应的操作 } } private: QLineEdit *lineEdit; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow window; window.show(); return a.exec(); } ``` 在上述代码,我们创建了一个继承自`QWidget`的`MainWindow`类。在构造函数,创建了一个`QLineEdit`实例`lineEdit`。 然后,我们使用`QObject::connect()`函数将`lineEdit`的`focusIn()`和`focusOut()`信号连接到槽函数`onLineEditFocusChanged(bool)`。在槽函数内部,根据传递的参数判断焦点是否改变,并执行相应的操作。 在主函数,我们创建了`MainWindow`的实例并显示出来。运行程序后,当`QLineEdit`获得焦点时,会输出"LineEdit has gained focus";当`QLineEdit`失去焦点时,会输出"LineEdit has lost focus"。您可以在槽函数添加自定义的操作来响应焦点变化事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值