alert @bar foo = new Foo() 编译为 var Foo, foo; Foo = (f-6ren">
gpt4 book ai didi

javascript - 为什么这会编译对类而不是实例的引用?

转载 作者:行者123 更新时间:2023-11-28 20:13:06 27 4
gpt4 key购买 nike

class Foo 
bar: "hello"
biz:
bang: ()=> alert @bar
foo = new Foo()

编译为

var Foo, foo;

Foo = (function() {
var _this = this;

function Foo() {}

Foo.prototype.bar = 'hello';

Foo.prototype.biz = {
bang: function() {
return alert(Foo.bar);
}
};

return Foo;

}).call(this);

foo = new Foo();

主要是为什么它编译为 alert(Foo.bar); 而不是对实例的引用?

最佳答案

它会使用对该类的引用进行编译,因为您使用的是 => 而不是 ->=> 将函数的@ 绑定(bind)到函数外部的@。对于类函数,bang 函数的外部 @ 就是类本身。

使用 -> 意味着函数内的 @ 取决于函数的调用方式,因此调用 instance.biz.bang() 将产生 alert(biz.bar)。像您尝试的那样嵌套对象通常会令人困惑。您尝试这样做有什么原因吗?我想说,这里的正确答案是不要像你一样嵌套,或者在任何地方显式执行 instance.biz.bang.call(instance) ,这将非常难看。

关于javascript - 为什么这会编译对类而不是实例的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19610981/

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