使用原型链定义函数
Define a function with a prototype chain
假设我有一个对象X
定义为
var X = function () {};
X.prototype.doSomething = function () {};
X.prototype.doSomethingElse = function () {};
是否可以构造一个函数f
以便f instanceof X
?请注意,我还必须能够在没有TypeError
的情况下执行f()
。
在 Mozilla 中,我可以用 __proto__
做我想做的事:
var f = function () {};
f.__proto__ = new X;
但是,这是 (1) 非标准和 (2) 已弃用。MDN 的__proto__
页面建议改用Object.getPrototypeOf
,但我真正想要的是一个Object.setPrototypeOf
(它不存在,尽管这个想法在这个错误报告中被提出)。
我想要的便宜近似是
var f = function () {};
jQuery.extend(f, new X);
不幸的是,这并不能使f instanceof X
正确(我也不会期待它!
不,这是不可能的(以标准方式)。创建可调用对象(即函数)的每种可能性都将创建一个继承自Function.prototype
1;并且之后无法更改对象的[[prototype]]
2.
另请参阅:
- 使用自定义原型在 JavaScript 中创建函数
- 你能用JavaScript中的自定义原型创建函数吗?
- 是否可以使用Function.prototype以外的其他原型创建函数?
- JavaScript 对象可以有一个原型链,也可以是一个函数吗?
- 函数的自定义原型链
- 函数的正确原型链(对于某些内部)
1:好的,ES6 允许我们对Function
进行子类化。但这并不像听起来那么有用。
2:从ES6开始,可以使用Object.setPrototypeOf
。
相关文章:
- 用嵌套函数和默认函数定义函数
- 自定义函数中的光标位置
- Jquery未定义函数正在停止其他操作
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- javascript无法重新定义函数内部的全局对象
- 定义函数时,如何捕获外部变量的当前值
- 能够在定义函数表达式之前使用它
- Google Sheet自定义函数返回0
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- 为什么当我需要位于顶部的函数时,在脚本中的某些点上没有定义函数
- 使用变量的名称,然后为该变量定义函数
- dalek回调或自定义函数
- 如何在angular ui模态控制器中定义函数
- Uncaught ReferenceError:尝试在Android网络视图中访问时未定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 使用 Javascript 中的函数重新定义函数