Edw*_*oso 13 javascript ecmascript-6
我注意到实验JavaScript中Function.prototype有一个toMethod()方法,但实际上它有什么作用?我该如何使用它?
Ber*_*rgi 14
更新:该toMethod方法仅是实验性的,并未达到标准.home对象现在基本上是静态的,唯一的操作方法super是更改[[prototype]]:
var base = {…}; // as below
var obj = Object.setPrototypeOf({
foo() { // needs to use method definition syntax
super.foo();
}
}, base);
obj.foo();
Run Code Online (Sandbox Code Playgroud)
它与bind函数对象的方法非常相似.但是,它不是创建带有绑定this值的新函数,而是创建一个带有绑定的新函数,该绑定[[HomeObject]]是用于super调用的引用:
[[HomeObject]](Object):如果函数使用super,则该对象[[GetPrototypeOf]]提供超级属性查找开始的对象.
考虑这个例子(不使用任何类语法):
var base = {
foo: function() {
console.log("base foo called on", this);
}
};
base.foo(); // base foo called on base
var obj = Object.create(base);
obj.foo(); // base foo called on obj
obj.foo = function() {
super.foo();
};
obj.foo(); // ReferenceError: this method has no home
obj.bar = obj.foo.toMethod(obj);
obj.bar(); // base foo called on obj
obj.baz = function() {
super();
};
obj.baz(); // ReferenceError: this constructor has no parent class
Reflect.setPrototypeOf(obj.baz, base.foo);
obj.baz(); // base foo called on obj
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1134 次 |
| 最近记录: |