首页 > 代码库 > JavaScript 中的 call 是换类用的

JavaScript 中的 call 是换类用的

       我不会 ‘use strict‘ 的,所以本文所述并不严谨。本来,现在的 JavaScript 就是你爱怎么看它它就是什么样儿的。

       比如说,你怎么看这句话:

var o = new SomeClass();

       生成一个类的对像是吧。乍一看你也不知道这是 C# 还是 JavaScript 的。那定义这个类的呢?

function SomeClass() {
  (function SomeClass () {
    console.log('SomeClass Constructor');
  })();
}

       我知道是没人这么玩儿 JavaScript 的。那么问题来了,C# 你没本事给一个对像换类是吧,但 JavaScript 行。

var obj = new SomeClass();
AnotherClass.call(obj);

       此时,obj 对像所属的类换成了 AnotherClass,被 call 后,obj 它已经是一个 AnotherClass 类的对像了。丫 obj 会重新做人,执行一次 AnotherClass 的构造函数。

       所以,JavaScript 中的 call 是给对像换类玩儿的。

-----------------------------------------------

       根本就不是这么回事儿。

       在 JavaScript 里,所有的 function 都是 Function 类的对像。所以 SomeClass 是类,也是对像。所以 JavaScript 里,类也是一种对像。

       C#,你类对像个试试?

       所以 JavaScript 天生就是个函数式的语言。多好。

-----------------------------------------------

       根本就不是这么回事儿。

       在 C# 里,Type 和 Class,就和 Attributes 和 Properties 一样,反正我是懒得去扣区分。问这问题的哲学观就不正常,你问 C# 去怎么区分。在 JavaScript 里是没有搞区分的机会,typeof 算符是个废物,而 class 也不是什么类。

       JavaScript 你搞个 Curry 给我看看?连 pipe 你都没有。

-----------------------------------------------

       根本就不是这么回事儿。

       不严谨不是可以胡扯的借口。

       JavaScript 之所以为 JavaScript,是因为 prototype。

       真相大白。

       所以 JavaScipt 中的 call 是用来玩儿多态的。

       这才是 call 的奥义。

       这才是真正的多态,这才是最牛屄的多态。今晚你想我是宝宝,我是宝宝,你想我是冰儿,我是冰儿。想要谁,call 一下,随 call 随到。

       好,那么问题来了。事件是什么呢?

       你猜呀。

------------------------------------------------

       今天,以新的身份,重回微软亚太研发集团大厦。黄健翔鼓动效果被微软的假给抵销得一干二净。不过,体育和传媒一样,都是好堂口。可以做事情的。

JavaScript 中的 call 是换类用的