帐号   密码      自动登录 找回密码 加入我们
    

中国诗人论坛|永远年轻的诗歌论坛|中诗网|中国诗人网|中国网络诗歌的源头

搜索
查看: 48|回复: 0

JS:上帝般的语言

[复制链接]
发表于 2022-5-3 18:48:58 | 显示全部楼层 |阅读模式
《JS:上帝般的语言》

(一)登顶者或挑战者

JS,是编程语言JavaScript的简称。

每个人都是一座孤岛1.jpg


JavaScript之父,是一个名叫布兰登·艾奇(Brendan Eich)的人,也就是上边这位大神。

编程语言分为低级语言和高级语言,低级语言如机器语言、汇编语言。
而在高级编程语言中,长期以来,有三门语言,如上帝一般地存在着,这三门语言就是C、C++、Java。
C、C++、Java,这三门也是C系风格语言中的典型代表,之所以说三者如上帝一般地存在着,理由如下:

【1】C语言:它是C系语言之祖,且相对古老,它是高级语言,但又是一门最接近低级语言的高级语言,而且是面向过程编程语言(POP)中的最典型代表,在世界编程语言排行榜中,是早期长期高居榜首者

【2】C++:它是C语言的加强版,不,应当说是超强版(的C语言),是具有革命性的新的C语言。

其一,你看,它不但是C语言,还带了加号+,而且还带了两,是C plus plus。第一说C++是C语言,是因为它兼容了C,C是C++的血缘继承上的父亲,C++基本上继承了C的所有功能和库;第二说它是超强版的C,是因为它功能上进一步得到了加强和丰富,而且这种加强是具有革命性的,因为C语言是面向过程编程语言(POP),而C++是面向对象编程语言(OOP),所以你既可以拿C++面向过程地编程,也可以拿C++面向对象地编程,而面向对象编程,是高级语言发展的新阶段,和高级语言现代性的特征表现。

其二,C++也是C系语言中功能最强大的语言,而且几乎可以说是所有编程语言中功能最强大的语言。第一,它不但具有C语言的功能,也具有自己高度丰富的面向对象功能库;第二,C++在功能设计的指向上没有作茧自缚,它的边界是广阔的,甚至是模糊和飘渺的,它不但可以像C一样的操作指针,而且拥有多重继承,对于OOP的三大特征,封装性、继承性、多态性,C++在部门特征封装性的基础上,继承性和多态性上的表现显然是高度突出的,无比强大的,这给了C++极强的可能性、表现欲或扩展性,让C++显得无比自由,让也使用C++的人几乎可以为所欲为。面对无比自由和强大的C++,程序员需要的是自律,因为自律即自由,否则很可能会将代码写的乱七八糟、虚无飘渺,让人难以看懂和把握,并留下一堆BUG。

其三,C++的性能是强悍的。第一,C++虽然它是C的升级版,有了更为强大的功能,但并没有降低多少C在性能上的表现。第二,编程语言有两种,一种是面向I/O为主的,一种是面向计算为主的。面向I/O(如磁盘IO或网络IO)为主的语言中,Java是佼佼者。而面向计算为主的语言中,毫无疑问,C++是佼佼者。

【3】Java:Java是C++的删减版,功能上有所削弱,其中的两个表现一是封装了指针,二是从C++的多重继承变成了单继承,但Java的封装性更好,更方便使用,更亲民。所以Java虽然没有名称在字面上没有带字母C,但骨子里还是C,是典型的C系或C系风格编程语言。Java虽然是C++的删减版,但功能上并没有太多减弱,而且在功能设计上还留了后门,所以作为一名Java程序员,只要你对Java足够精通,某种程度上仍然是可以为所欲为的。Java的便利性和亲民性,加上无限接近C++的强大功能,让Java大受欢迎,广为流行,长期以来拥趸无数,高居世界编程语言排行榜TOP1的位置,这个位置代表的是编程语言在市面上的受欢迎程度。

而Java的TOP1的位置,目前主要有三门语言偶尔具有一定的挑战性:一是古老的C,二是Python,三是JavaScript。

C缘于其古老和强大,具有某种无可替代性,像一道绕不开的大门或关卡,遂追随者众。

Python缘于其通用性和便捷性,以及计算上的亲缘性,通用性是说Python的约束很少,它是一门通用语言,可以拿来做很多事情,便捷性是说Python使用上很方便,可以简单上手,易学易用,Python不但是通用语言,而且也是一门解释型的脚本语言,操作起来非常方便,入门的门槛不算太高,计算上的亲缘性,是Python一开始主要就是设计用来做计算的,比如做数据分析等,也因此,Python,凡是突出计算的任务,Python都非常适合,具有很强的亲合力,比如大数据,数据仓库,数据挖掘,数据分析,人工智能等。Python自然也是一门现代性的高级语言,而且Python的面向对象特征可以说是最彻底的,比如比C++、Java就要更加面向对象,实现了真正意义上的完全基于对象和完全面向对象,完全体现出了万物皆对象的内在主张。由于Python的以上特征,让Python在数据分析、互联网Web建站、嵌入式开发、大数据、人工智能、系统运维、游戏开发、物联网等诸多方面,都有斩获,表现优秀,甚至非常卓越。在编程风格上,Python走的是Ruby的路线,崇尚极简和面向使用者(程序员),这让Python程序员写起代码来,要多爽有多爽,换句话说,就是高度亲民啊,所以Python粉丝无数,在整个编程江湖,可谓教徒万千、盘根错节、势欲参天,它不断地扩展着自己的地盘,没有尽头。

JavaScript之所以也能挑战Java一般把,一是名字上就带了Java,这不是为了坑爹,而是为了坑江湖教主(Java)呀,二是功能上的强大,JavaScript是真正意义上的全栈式的编程语言,JavaScript这些年,也是情势熏天,流行程度直逼上限,大受欢迎,有一句话说得好:一切能用JavaScript实现的,最终都会用JavaScript。原本看似不起眼的、甚至有点丑陋的JavaScript,其发展势头,大有势不可挡之势,JavaScript是极度牛逼克拉斯的,如果你足够了解它,你就会发现,它其实是一门上帝一般的语言。

下面,我们就来分析和认证一下,为什么我们说JavaScript是一门上帝般的语言。


(二)上帝般的语言

要说明JavaScript是一帝般的语言,首先要说一下或理解一下,什么是上帝。


一、什么是上帝

我们说的上帝,自然是指基督教的上帝。

为了方便理解,我们用列举的方式来说,上帝大体是这样的,具有这样几个方面的特点:

(1)上帝是创世者,是一切的根源或源头

(2)上帝是自足者

(3)上帝是万能的,他无所不有,无所不能,无所不在

(4)上帝是三位一体的,是圣父、圣子、圣灵的统一(此三者只是理解和表达上的分别或区别,本质上是统一的和一体的)

(5)上帝在位格上是最高位者,是唯一的真神,但上帝是大爱的和平等的

(6)如果深层追溯,上帝足够抽象。道可以道非常道,名可名非常名。

(7)上帝具有对象性,上帝是道和道路。上帝是一切低位者的崇拜者,是崇拜的对象;上帝具有最终的审判权和裁决权,上帝是忏悔者或回归者道路的尽头。上帝是万物和所有人的对象,同时万物和所有人,也是上帝的对象,上帝是大爱的,万物皆对象。上帝不但创建了世界和万物,而且上帝以自己的模样,创造了人。

(8)上帝具有语言性和表达性,其表达具有规律性和支配性,即上帝具有道或道性。

(9)上帝可以具象化和具体化。上帝是高度抽象的,但上帝道成肉身,化身基督(耶稣),上帝虽然无比抽象(道可以道非常道,名可名非常名),但上帝是万能的,所以可以从抽象走向具象,其一切表达和潜质,皆可实现。

(10)某种意义上,上帝具有不可名状性。上帝自身是统一的,但相对于低位者相对于人来说,上帝又是二律背反的。上帝的高度抽象性,让人或低位者难以理解和捉摸;上帝的二律背反性,上人或低位于容易陷入理解上的自我矛盾和认知陷阱;上帝神格上的三位一体性,让人完全难以把握。从某种程度上讲,面对上帝,人的处境,尤其是普通人的处境是有点尴尬的,有点“侯门一入深似海,从此萧郎是路人的”赶脚,典型智商不够啊,上帝太过高深,一般人去理解上帝的时候,一般是费尽千辛万苦、走过千山万水,最终仍然处于认知上的初始阶段,真正地或较为彻底地认知和理解上帝,犹如共产主义一般遥遥无期。



二、为什么说JavaScript是上帝一般的语言


1.JavaScript是创世者(JavaScript,以下简称JS)

创世,即创建一切对象或实例,你可以使用JS,自由挥洒,不断创建各种各样的对象,以最终实现各种各样的功能。

1)基于对象或封装对象:隐式创建的对象(从自面量到对象)
JS是基于对象的,比如:var str = 'hello world';
var arr = str.split(' ');
换句话说,'hello world'是字符串字面量,同时也是对象或具有对象的特性,因为它JS自动封装了,所以有了split这样的方法

2)面向对象:当然,使用JS更多地是显式地或手动地创建对象。JS提供了三种方式

A)字面量方式,如:var obj = {}
B)构造函数方式,如:var arr = new Array()
C)new Object方式,如:var o = new Object()。本质上讲,Object也是构造函数

另外,ES6还提供了实例化类的方式,比如:

class Person {
}
var p = new Person()



2.论JS的自足者足


1)一切对象,皆有原型。(原型对象也有原型)

2)null也是对象,但null不适用第一条

3)Object之禅::空与不空

A)Object原型对象的原型(null):空的智慧——性空归零,无即是有

B)Object原型对象(Object.prototype):不空的智慧——穷家富路,应足俱足

3)一切皆对象:函数的本质是对象,但类型是function

function F(){}
console.log(typeof F) //返回function

4)Object和Function的相互成就:Object构造函数和Funtion构造函数互为实例

console.log( Object instanceof Function)  //返回true
console.log( Function instanceof Object) //返回true

5)Function诞生自己:Function构造函数,new了自己一把

Function = new Function()

换句话说,Function本身就是自足者,自己诞生自己。


3.论JS的万能或无所不能

1)万能的上帝:一切可以用JS实现的,终将被JS实现

JS是强大的,从前端JS到后端JS,全栈JS;从原生JS到TypeScript。

JS越来越强大,越来越好用,越来越流行,这一趋势势不可挡。

一切可以用JS实现的,终将被JS实现。

JS越来越像上帝一般存在着:真身显露,众生皈依。

2)可能与实现:美与丑、好与坏,以及上帝的选民
能,是一种能力或可能性。能,并不一定就是现实的,或已经实现了的。

万能,是个概数或泛指,主要有两得含义:

一指功能,万能即功能极其众多,甚至无所不能
二指可能性,有诸多种实现的可能,甚至有无数种实现的可能。

JS是万能的,但从可能到实现,中间是有区别的,可能是美好的,但实现可能是丑陋的,当然也可能是美好的。

最后的结果留给了时间,优胜劣汰、大浪淘沙,好的留下,不良者最终出局,这是上帝的法则,是天道,不可逆转。


4.论JS的三位一体的

1)圣父:Object及其原型对象和Function

2)圣灵:原型(原型对象prototype即对象原型__proto__)

原型是什么,原型通常指构造函数的原型对象或实例对象的对象原型,而二者又是一个东西。
比如我们先定义一个构造函数:

function C(){
}

然后这个构造函数创建一个实例对象c

var c = new C()

那么,构造函数的原型对象(即prototype),本例中即:C.prototype
而实例对象的对象原型(即__proto__),本例中即:c.__proto__,
说二者其实相等的,本例中即:C.prototype === c.__proto__,返回true。

我们说万物有灵,JS中的对象,都有自己的原型,又由于原型本身也是对象,即原型对象,
所以原型对象也有自己的原型,从而可以不断向上追溯和查找。

而各层级的原型上,可能定义各种各样的属性和方法,可供继承和使用,这相当于灵魂传递和基因遗传。


A)构造函数的创建对象的模板

B)构造函数:特殊的函数,特殊的对象

* 构造函数是函数,其类型是function,但是一种特殊的函数,因为它是专门用来实例化对象的,是对象的模板;
* 在JS中,函数也是一种对象,一种特殊的对象,即函数对象,类型为function,本质为对象

C)JS中有两种构造函数:自定义的构造函数 和 系统自带的构造函数

* 系统自带的构造函数,例如Object,Function,Array,Date,String等

系统自带的构造函数,又大体可以分为两种:

一是Object和Funciton,

二是Object和Function之外的 其它系统级构造函数,如Array、Date、String等

* 自定义构造函数

举个例子:

function Duck(name, color){
  this.name = name
  this.color = color

  this.quack = function(){
    console.log('呷呷呷 吖吖吖')
  }
}

Duck就是自定义构造函数,我们可以拿它来创建鸭子对象

var d1 = new Duck('唐老鸭','白色')

说构造函数是圣子,因为它道成肉身,它具有显式名,比如自定义构造函数的Duck,其名叫Duck,
但它本身是有肉身的,是有形的,因为函数也是一种对象,即函数对象,函数对象可以有自己的属性方法,
比如静态属性和静态方法。

比如:

function Person(name, age){
  this.name = name  //成员属性
  this.age = age  //成员属性
}

Person.sex = 'male'  //静态属性

在JS中,构造函数中,成员属性属于实例对象(绑定给了this指向的实例对象),静态属性则属于构造函数本身(绑定给了首字母大写的构造函数本身)


5.论JS的道性

JS的道性有三:1)语言性:或者说表达性和约束力;2)道路性:实例化和原型链 3)抽象性

1)JS的语言性

2)JS的道路性

JS是有道路性的,即原型链或隐式原型链。
原型链就像一条路或者就是一条路。它是实例对象追溯或查找自身可用属性方法的机制和途径。
原型链,让实例对象,可以从对象自身出发,通过不断的对象原型属性__proto__指向,实现向上追溯和查找。
如:
function O(){}
var o = O()
console.log(o.toString())

实例对象o,首先会在自己找上查找toString方法
如果没有,则在自己的原型(o.__proto__)上查找toString方法,找到则调用;
如果还没有,则会在自己的原型的原型(o.__proto__.__proto__)身上查找toString方法,找到则调用;
如果还没有找到,则会在自己的原型的原型的原型(o.__proto__.__proto__.__proto__)上查找toString方法,找到则调用;
直到找到toString方法或null对象,如果找到toString方法,则使用它;如果找到null则返回unefined。

事实上,o.toString()最终会在o.__proto__.__proto__原型上找到toString方法,所以最终输出[Object object]
o.__proto__.__proto__原型,其实就是Object的原型对象(Object.prototype),二者是相等的。

o.__proto__.__proto__ === Object.prototype //返回true

3)JS的抽象性



6.论JS的道成肉身或言成肉身

1)道可道,道成肉身即言成肉身:new或new语句

2)肉身的父:尘世之父(直接的构造函数)和天堂之父(Object构造函数)

3)肉身的身形(对象实体{})与灵魂(对象原型__proto__)


7.论JS的通天之道

1)道即道路:原型链(或原型链路)


2)通天之道——原型链的尽头:Object原型对象和null对象


3)自古华山一条道:从构造函数到原型链,最后到null


8.为什么说JS是高度抽象和足够抽象的:空与不空;足够简单,源于足够复杂



9.论JS的对象性和可具象化


















您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

闽公网安备 35020302001206号

[中国诗人论坛] ( 豫ICP备11003363号-2

GMT+8, 2024-4-19 03:38 , Processed in 1.264618 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2011 Comsenz Inc.

返回顶部