javascript犀牛--读书零碎
读 o'reilly 犀牛
-------------------------------------------------------------------------------
获取对象(比如 var o={x:1,y:2})的信息有一下方法:
- 对变量应用 " .constructor"属性或者 " typeof "方法也可以获得关于对象的一些信息;
- 反射:利用 for (.. in ..) 实现"反射";有意思的是数组和对象都能把 "." 和 "[]"当作操作符
------------------------------------------------------------------------------
临时对象?对象包装器:
对象环境 就是需要把一个东西当作有属性有方法的能自我描述的应用上下文,像字符串、数字、boolean三种类型都有所谓的对象包装器,而字符串出现对象环境比较常见;原始字符串值遇到对象环境时,比如求字符串的长度或者子字符串时就会临时创建一个string类来使用,用完了就被抛弃;相应string对象遇到非对象环境时也会临时创建一个字符串值来操作,比如需要两个字符串用 " + "号连接的时候。
--------------------------------------------------------------------------------
Eval()函数:
如果参数不是字符串 则 直接返回参数;如果是字符串,并且字符串作为脚本执行后的返回结果是一个值 则 返回此值,否则 返回undefined;对于对象声明的(比如{c:hello})如果加上"("和")"则返回object。
如何在全局环境使用局部变量呢?这个要求实在是过分,可能有这样的需求环境,比如wangyij说的情况;解决方法如下:
---------------------------------------------------------------------------------
js变量的作用域:
看zhangljerry写的《关于js变量的作用域 》,大致总结一下;名字很多 参考其他语言可以减少大脑负担,从javascript源码的词法结构来说:
变量称呼 声明方式 注意事项
局部变量 {}内有效的,var声明的; 未赋值则返回undefined、不存 在块儿级的变量;
全局变量 {}内没用var声明的,全局用var声明的;
类变量 类内的属性、方法都是; 没什么;
私有变量 类内用var声明的变量、匿名函数引用; 比如var func1=function{}、私有方法不能操作非私有变量;
实例变量 在实例化以后通过"."操作符新建的变量; 只对该实例可见;
静态变量 属于类的,当然也属于它的实例、用this声明的;比如this.name='hzq';
新的理解或者说新的解释就是: 全局变量是全局对象的一个属性,而局部变量是特殊的调用对象的属性;
----------------------------------------------------------------------------------
关于函数的----隐藏的Argument对象、神奇的prototype属性
函数调用时可以传递的参数不必拘泥于形参,而非形参的参数值可以通过Argument暂时作为数组时 用下标取得;另外Argument的属性callee是对函数自身的调用,可用于匿名函数,而length属性反应了实际传递参数的个数,Argument.callee.length则是形参的个数;
每个函数都有call和apply()两个方法,如:function f(x,y){};var c=new bject();f.call(c,x,y);或者f.apply(c,[x,y]);
prototype是一个类的构造函数被new操作符使用时产生的 对一个对象的引用 作为该构造函数的属性;通过在prototype引用的对象上定义所有该类的实例都拥有的方法和常量值,避免了实例变量和实例方法的大规模复制;
-------------------------------------------------------------------------------------
用函数做参数在数组的sort()方法里可以,我想javascript这样没有绝对类型的语言 这种现象会很普遍。
直接量和构造函数的概念、区别;