javascript - public.onChange = Function.prototype 的作用是什么?

标签 javascript angular typescript angular5

当我试图找到一些用于在 Angular 5 中设计内联编辑表单输入组件的示例代码时,我摸不着头脑。我运行了以下几行:

public onChange: any = Function.prototype; 
public onTouched: any = Function.prototype;

我的问题是:他们做什么?然后该示例继续并实现 ControlValueAccessor 接口(interface)。它将实现一些像这样的成员:

public registerOnChange(fn: (_: any) => {}): void {
  this.onChange = fn;
}

public registerOnTouched(fn: () => {}): void {
  this.onTouched = fn;
}

所以看来您会将一些函数分配给全局函数原型(prototype)。这是好的做法吗?作者想用它做什么?

最佳答案

可以安全地假设这些方法用作钩子(Hook),并且使它们无条件运行是开发人员在调用它们之前避免 if (typeof onChange === 'function') 检查的一种方法。

Function.prototype 是所有常规函数的原型(prototype),基本上是 noop 函数。意外修改其属性(不太可能但可能)将影响所有现有功能,例如onChange.apply = ...

更安全、传统且可读的方法是显式分配 noop 值:

public onChange: any = () => {}; 

关于javascript - public.onChange = Function.prototype 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49287465/

相关文章:

java - imacros - 使用 javascript 读取文本文件

javascript - Jasmine 单元测试中未调用 Angular $http.get 成功处理程序

angular - Angular 4 中的动画路线

javascript - 来自 localstorage 的 {{array.value}} 不工作

Typescript 合并从联合类型创建的映射类型

javascript - 将文本框的值发送到jquery函数

javascript - Angular 绑定(bind)不会发生

angular - 从其他组件获取所有参数的访问权限?

angular - 在 Promise 中返回 Observable

Angular 7 - 检测到循环依赖项中的警告 :