js 语言断想

关于js的实质,前人已经指出,是c风格的lisp.越用越发现其事确实.

js 的核心代码只有两句:
第一句:

var  a  =  [];

第二句:

eval();

 

第一句包括了js对数据组织的观念.一对简单的 [], 里面盛放的可以是数据,可以是代码,可以充当数组,可以充当堆栈,队列,也可以充当哈希表,最后,又可以充当对象.

充当数组堆栈看看它的方法即可了解. 充当哈希表是怎么回事呢?
试看如下代码:

a[ ' name ' =   ' 孟昭 ' ;
alert(a[
' name ' ]);

 

js的对象即是通过哈希表来实现的,如上面的 a['name'], 变一种写法:

alert(a.name);


可见, 属性其实就是书写形式上的一个语法糖.

要给a对象增加一个方法,可以这样做:

a[ ' sayHello ' =   function ()... {
 alert(
'大家好,我是' + this.name);
}

a.sayHello();


在js的世界观里,对象就是代码块和属性块的杂凑.

坊间一般先介绍 function 模拟class, 其实远矣, js 的function模拟OO语言的类不过是js边边角角的一块.
请看上面的 fucntion() 内的this, 在该function被呼叫时, this所指的实际上是该块代码所属的a.
回头看这种写法:

function  Man() {
 
this.name = '孟昭';
 
this.sayHello = function(){
 alert(
'大家好,我是' + this.name);
 }

}

var  a  =   new  Man();
a.sayHello();

对比this的用法.在 [ ] 的理念里, this 代表的是一个先行声明的a, 而在 function Man 中,this代表的是一个未声明的新变量.该 function 被叫后为匿名变量设置name和sayHello两个成员. 在 var a = new Man() 执行后, 借助new 关键字, a 变量获得对该匿名变量的引用.

因此,在js里,function作为一种辅助机制,其功能是对代码块进行封装.
而代码块的执行, 在js的理念中,实为对文本的一段 eval(). 如代码

a[ ' sayHello ' =   function () {
 alert(
'大家好,我是' + this.name);
}

a.sayHello();

书写为以下形式,相信有助于了解它的实质:

a[ ' sayHello ' =   " alert('大家好,我是' + this.name) " ;
eval(a.sayHello);

最后,请试验一下两次命令的alert(a.sayHello),观察 sayHello里究竟放的是什么.

到这一步,对于function的认识更加明朗了,其实就是给代码块做了一个包装+命名.

当然,没有 function 也是不行的. 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值