Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ES6中,为什么可以';不使用此选项就引用同级方法吗?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 在ES6中,为什么可以';不使用此选项就引用同级方法吗?

Javascript 在ES6中,为什么可以';不使用此选项就引用同级方法吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,我想,在大多数其他语言中,这为什么行不通呢 class Test { a() { console.log('hi'); } b() { a(); } } 在Java或Ruby中,这是可行的。从b给a打电话完全可以。。但是在Javascript类中。为什么我需要把这个.a,这个.b,这个 它背后的技术原因是什么,它的好处是什么,从现在起它会改变吗?有计划吗?基本上,JavaScript没有基于类的继承。它有基于原型的继承和一些语法糖来模

我想,在大多数其他语言中,这为什么行不通呢

class Test {
    a() {
       console.log('hi');
    }
    b() {
      a(); 
    }
}
在Java或Ruby中,这是可行的。从b给a打电话完全可以。。但是在Javascript类中。为什么我需要把
这个.a
这个.b
,这个


它背后的技术原因是什么,它的好处是什么,从现在起它会改变吗?有计划吗?

基本上,JavaScript没有基于类的继承。它有基于原型的继承和一些语法糖来模仿基于类的继承

更一般地说,如果试图确定
a()
是否表示
this.a()
,或者它是否表示当前函数可以访问的范围内存在的另一个
a()
,则会出现严重的性能问题。这甚至可能在每次调用
b()
时发生变化

记住,在JavaScript中,仅仅因为一个对象现在有一个方法
a()
,并不意味着它以后还会有这个方法
a()
。可以从对象中删除方法,也可以向对象添加新方法


试图确定哪个函数是预期的调用目标,基本上会产生与导致
with
现在被弃用的性能问题完全相同的性能问题-有大量的优化无法实现,因为在您尝试这样做之前,您无法确定将调用哪个方法。

,基本上,JavaScript没有基于类的继承。它有基于原型的继承和一些语法糖来模仿基于类的继承

更一般地说,如果试图确定
a()
是否表示
this.a()
,或者它是否表示当前函数可以访问的范围内存在的另一个
a()
,则会出现严重的性能问题。这甚至可能在每次调用
b()
时发生变化

记住,在JavaScript中,仅仅因为一个对象现在有一个方法
a()
,并不意味着它以后还会有这个方法
a()
。可以从对象中删除方法,也可以向对象添加新方法


试图确定哪个函数是预期的调用目标,基本上会产生与导致
with
现在被弃用的性能问题完全相同的性能问题-有大量的优化无法实现,因为在您尝试这样做之前,您无法确定将调用哪个方法。

我会改变的。好处是维护JavaScript关于给定名称引用内容的简单规则。原因是福利+类是假的,原型是真的(如果
Test
没有定义
a
,但是继承自它的类定义了
a()
仍然意味着
this.a()
?)。至于“背后的技术原因”,最好问问Brendan Eich。但请记住,他在短短10天内编写了ECMAscript的基础知识,并实现了原型继承,而不是类,因此答案可能是“当时这似乎是个好主意”。-)@Ryan如果子类扩展了
Test
,那么该类的实例将引用子类的
a
,不管它是否在
Test
中定义,它都会被
子类
所覆盖。父类无论如何都不能访问子类的方法“父类无论如何都不能访问子类的方法”在JavaScript上下文中没有任何意义。看看Python的长期类实现,不会改变。好处是维护JavaScript关于给定名称引用内容的简单规则。原因是福利+类是假的,原型是真的(如果
Test
没有定义
a
,但是继承自它的类定义了
a()
仍然意味着
this.a()
?)。至于“背后的技术原因”,最好问问Brendan Eich。但请记住,他在短短10天内编写了ECMAscript的基础知识,并实现了原型继承,而不是类,因此答案可能是“当时这似乎是个好主意”。-)@Ryan如果子类扩展了
Test
,那么该类的实例将引用子类的
a
,不管它是否在
Test
中定义,它都会被
子类
所覆盖。父类无论如何都不能访问子类的方法“父类无论如何都不能访问子类的方法”在JavaScript上下文中没有任何意义。看看Python由来已久的类实现。Ruby有元编程,您可以在其中动态添加方法,但它工作得很好。@MuhammadUmer:MRI与现代JavaScript引擎相比速度慢得惊人。这与“工作”无关。这种语言可以有这个特性,而且可以工作,但是它的性能不好。即使在今天,您也可以使用(this){}将所有方法包装在
中,从而获得所需的行为。。。“付出了巨大的性能代价”。@穆罕默德·默多默:这种行为——你从你的提案中得到的——也是……粗俗的@Ryan是一个很好的例子,但是,我不认为在任何模式下都会创建这样的随机kamikaze全局函数,但我看到了它的优点。但请注意,这样做会很奇怪。Ruby有元编程,您可以在其中动态添加方法,但它工作得很好。@MuhammadUmer:MRI与现代JavaScript引擎相比速度非常慢。这与“工作”无关。这种语言可以有这个特性,而且可以工作,但是它的性能不好。即使在今天,您也可以使用(this){}
将所有方法包装在
中,从而获得所需的行为。。。“付出了巨大的性能代价”。@穆罕默德·默多默:这种行为——你从你的提案中得到的——也是……粗俗的@Ryan是一个很好的例子,但是,我不认为在任何模式下都会创建这样的随机kamikaze全局函数,但我看到了它的优点。然而注意到