gpt4 book ai didi

javascript - Function.prototype.toMethod() 是做什么的?

转载 作者:可可西里 更新时间:2023-11-01 01:51:56 25 4
gpt4 key购买 nike

我注意到 Function.prototype 在实验性 JavaScript 中有一个 toMethod() 方法,但它实际上做了什么?我该如何使用它?

最佳答案

更新:toMethod 方法只是实验性的,没有成为标准。 home 对象现在基本上是静态的,操作 super 的唯一方法是更改​​ [[prototype]]:

var base = {…}; // as below
var obj = Object.setPrototypeOf({
foo() { // needs to use method definition syntax
super.foo();
}
}, base);
obj.foo();

它非常类似于函数对象的bind 方法。但是,它不是创建一个具有绑定(bind) this 值的新函数,而是创建一个具有绑定(bind) [[HomeObject]] 的新函数。 ,这是用于 super 调用的引用:

[[HomeObject]] (Object): If the function uses super, this is the object whose [[GetPrototypeOf]] provides the object where super property lookups begin.

考虑这个例子(不使用任何类语法):

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

关于javascript - Function.prototype.toMethod() 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com