javascript中函数、对象、原型链等的深入自我理解

js中以对象为核心,所有皆对象。

狭义的讲,js中的对象比较纯粹,就是一个大括号包裹的键值对,键为名(有待深入解析,可能就是语法本身),值为对象。

这个基本要素和C++比较接近,并没有凭空创造出新的语法来完成这个对象(类)的构造过程。

函数本身是对象,可以作为对象中的值存在,同时就换了个名字,即该对象的方法。

但是函数+()则变成了一个函数过程,这个过程本身不能作为对象,就像程序的哲学终极意义解剖开来,必定是一个物的变化。

那么这个物是对象,这个变化就是函数过程了。

任何一段打出来的js语句都是函数过程。

js中有一个原型对象由Object这个函数创造,任何通过function()定义的函数,直接执行是函数过程,同时也是这个程序执行时顶级window的一个方法,this即指向于此。

如果通过new + 函数名()的形式,则返回的是通过这个函数加工的一个实例对象,原料则是Object函数创造的一个实例。

狭义的函数有prototype属性,所有对象皆有__proto__属性。

当一个原料对象通过一个函数加工成一个实例对象时,则这个实例对象的__proto__属性则会复制该函数的prototype属性。

那么prototype属性本身也是一个对象,他又是由哪个函数创造的呢,他的__proto__属性又等于哪个函数的prototype属性呢?

很显然,就是Object函数。那么Object函数的原料是什么呢?他的prototype属性是由哪个函数创造的呢,答案是null,Object.prorotype.__proto__==null

所谓原型链指的就是这个。

函数本身作为对象实例是如何制造出来的呢?

这就是内置对象Function的作用了。

var f = Function(args,statements)创造出的f即为函数。

所以f的constructor是Function,f的__proto__是Function的prototype。

所有函数都是用原料Object通过Function加工出来的对象实例,包括Function本身。

对于普通函数f来说,f.__proto__===f.prototype是不成立的,

因为f.__proto__===Function.prototype。

但对于Function来说,则Function.__proto__===Function.prototype===Object.__proto__

js的内置对象Array、Boolean、 Date、 Error、 Function、 Global、 JSON、 Math、 Number、 Object、 RegExp 和String

道生一,一生二,二生三,三生万物。

所谓的js的继承就是这个三生万物,用的方法也是一样的。

让子函数的prototype=父函数的一个实例即可。

子实例的创造只要用父函数的实例作为原料通过这个函数过程加工下即可。

js力求简单,少了很多实在的概念,相对于python来说没有将很多底层的东西封装成一个个的概念,因此也难于理解,但是一旦理解了,就到达了根源。es6的很多新内容其实就是在朝着python的方向在走,包裹了很多新的概念,记忆的东西多点,逻辑上会简单很多。

 

其实计算机编程语言的深入理解必然要从硬件实现方法,到汇编,到C这种纯函数式的过程,到C++以及各种其他语言制造的语法糖式的编程符号来反向追溯,如果能将这个体系完全清晰的架立在自己脑海中,做到了这一点,不仅可以立即学会并精通一门新的语言,而且作为一门语言新的创始人也是简简单单的事情。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值