在es6的构造过程中对所有实例方法自动调用bind()
Automatically call bind() on all instance methods in es6 during constructor
我怎么能(或它是可能的)使一个JavaScript基类,自动调用绑定它的每个实例方法在它的构造函数?
I tried, without success:
class BaseClass {
constructor() {
// for (let i in this.__proto__) { // <-- this also failed
for (let i in this) {
if (typeof this[i] === 'function') {
this[i] = this[i].bind(this);
}
}
}
}
class MyClass extends BaseClass {
constructor() {
super();
this.foo = 'bar';
}
myMethod() {
console.log(this.foo);
}
}
当我在构造函数中设置断点时,this.myMethod
存在,并且在this.__proto__
中存在,但在Object.getOwnPropertyNames(this)
中,无论是在类的构造函数中还是在基类的构造函数中都不存在。
基本上我试图做奖金步骤在这篇博客文章中(在结论之后)不需要手动定义或调用_bind()
。
ES6类方法是不可枚举的,所以你必须自己遍历原型链。
for (let obj = this; obj; obj = Object.getPrototypeOf(obj)){
for (let name of Object.getOwnPropertyNames(obj)){
if (typeof this[name] === 'function'){
this[name] = this[name].bind(this);
}
}
}
避免这种复杂性是"奖励步骤"明确命名要绑定的东西的原因。对于每一个单独的对象创建它也会慢很多
相关文章:
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- javascript从子方法调用父方法
- 我应该返回一个类似console.log()的方法调用吗
- NodeJS-从同一文件中的另一个方法调用一个方法
- 从实例方法调用实例方法
- 向模板实例变量传递调用方法调用的结果时出现异常
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- 附加到 DOMWindow 实例而不是自身实例的嵌套方法调用
- 如何根据所选选项调用实例方法
- 如何在匿名函数中调用实例方法
- 如何定义扩展方法并将其作为实例和静态方法调用
- 将hasOwnProperty作为调用方法的直接静态引用进行调用的好处,而不是将其作为对象实例方法进行调用
- 调用类实例方法onclick javascript
- 在Javascript中调用不带传递函数的组合私有类成员的公共实例方法
- 在VueJS中,从Vue实例内的方法调用一个过滤器
- 如何在我的javascript文件中调用各种goog.i18n.TimeZone实例方法
- Javascript OOP -对象如何调用其实例方法
- 不能在java/coffeescript中调用实例方法
- 为什么在新实例中调用方法
- 在es6的构造过程中对所有实例方法自动调用bind()