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 随到。

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

你猜呀。

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

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

时间: 2024-12-17 22:25:01

JavaScript 中的 call 是换类用的的相关文章

JavaScript中函数、对象、类关系 记录

函数和对象的关系 函数可以有属性,对象也可以有属性,在函数名前使用 new 操作符即可返回一个函数的实例化对象 function fn () {} fn.a = 'haha' console.log(fn.a) //"haha" let obj = {} obj.a = 'heihei' console.log(obj.a) //"heihei" let newObj = new fn() 每个函数都有一个属性(prototype)原型对象,发现有construct

Javascript中两种最通用的定义类的方法

在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定义描述为对象的配方(先看一下例子会比较容易理解).定义类的方法有很多种,这里有两中较为通用的方法,大家参考一下.这两种方法均可以解决 构造函数会重复生成函数,为每个对象都创建独立版本的函数的问题.解决了重复初始化函数和函数共享的问题??提示音:http://www.huiyi8.com/tishiy

Javascript中定义类

Javascript 本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的 virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象. 一:定义类并创建类的实例对象在Javascript中,我们用function来定义类,如下: function Shape(){var x = 1 ;var y = 2 ;} 你 或许会说,疑?这个

JavaScript中的工厂方法、构造函数与class

JavaScript中的工厂方法.构造函数与class 本文转载自:众成翻译 译者:谢于中 链接:http://www.zcfy.cc/article/1129 原文:https://medium.com/javascript-scene/javascript-factory-functions-vs-constructor-functions-vs-classes-2f22ceddf33e#.wby148xu6 在ES6出现之前,人们常常疑惑JavaScript中的工厂模式和构造函数模式到底有

JavaScript中的原型和继承

请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans 原型车.这些车虽然是由"奥迪"或"标致"这些厂商制造的,可它们并不是你在街上或速公路上所见到的那类汽车.它们是专为参加高速耐力赛事而制造出来的. 厂家投入巨额资金,用于研发.设计.制造这些原型车,而工程师们总是努力尝试将这项工程做到极致.他们在合金.生物燃料.制动技术

Javascript中值的访问与参数传递问题

数据类型 在 javascript 中数据类型可以分为两类: 原始数据类型值 primitive type,比如Undefined,Null,Boolean,Number,String. 引用类型值,也就是对象类型 Object type,比如Object,Array,Function,Date等. 声明变量时不同的内存分配 原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.这是因为这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 栈中

说说JavaScript 中的new吧

在其他语言中,new操作符都是用来实例化创建一个对象的,JavaScript 中同样如此,但是它又有一些不同.为了说清楚这个问题我们先来看一下JavaScript 中的类.原型.原型链.继承这些概念吧. JavaScript 中没有传统类的概念,它的类就是一个方法,也就是说JavaScript 中是通过function来定义类的.比如我们可以这样子来定义一个类. function Person(name, age) { this.name = name; this.age = age; this

【转】JavaScript中的原型和继承

请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans 原型车.这些车虽然是由“奥迪”或“标致”这些厂商制造的,可它们并不是你在街上或速公路上所见到的那类汽车.它们是专为参加高速耐力赛事而制造出来的. 厂家投入巨额资金,用于研发.设计.制造这些原型车,而工程师们总是努力尝试将这项工程做到极致.他们在合金.生物燃料.制动技术.轮胎的化合物成分和安全特性上

Javascript中的Object类

Object类是Javascript中最基本的类,用来创建普通对象,通常用这些对象存储数据. 1.Object对象 1.1.创建Object对象 创建Object对象有两种方式 第一种创建方式:new Object() var obj = new Object(); 第二种创建方式:{} var obj = {}; var obj2 = {"name":"tom","age":24}; 1.2.添加属性 obj.firstname = "