-
JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定 义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码。
-
JavaScript 里的代码也是一种数据,同样可以被任意赋值 和修改的,而它的值就是代码的逻辑。只是,与一般数据不同的是,函数是可以被调用执行的。
JavaScript 函数的神奇之处还体现在另外两个方面:一是函数 function 类型本身也具有对象化的能力,二是函数 function 与对 象 object 超然的结合能力。其实,函数就是对象,只不过比一般的对象多了一个括号“()”操作符,这个操作符 用来执行函数的逻辑。即,函数本身还可以被调用,一般对象却不可以被调用,除此之外完全相同。
JavaScript 里的函数和对象既有对象的特征也有数组的特征。这里的数组被称为“字典”,一种可以任意伸缩的名称值对儿的 集合。
其实, object 和 function 的内部实现就是一个字典结构,但这种字典结构却通过严谨而精巧的语法表现出了丰富的外观。 -
JavaScript 中也有 this,但这个 this 却与 C++、C#或 Java 等语言的 this 不同。一般编程语言的 this 就是对象自己,而 JavaScript 的 this 却并不一定!this 可能是我,也可能是你,可能是他,反正是我中有你,你中有我,这就不能用原来的那个“自我”来理解 JavaScript 这个 this 的含义了。为此,我们必须首先放下原来对象的那个“自我”。
-
同一个函数可以从不同的角度来调用,this 并不一定是函数本身所属的对象。this 只是在任意对象和 function 元素结合时的一个概念,是种结合比起一般对象语言的默认结合更加灵活,显得更加超然和洒脱。
-
JavaScript 提供了传递 this 参数的多种形式和手段,其中,象 BillGates.WhoAmI()和 SteveJobs.WhoAmI()这种形式,是传递 this 参数最正规的形式,此时的 this 就是函数所属的对象本身。而大多数情况下,我们也几乎很少去采用那些借花仙佛的调用形式。但 只我们要明白 JavaScript 的这个“自我”与其他编程语言的“自我”是不同的,这是一个放下了的“自我”,这就是 JavaScript 特有的世界 观。
function MyFunc() {}; //定义一个空函数
var anObj = new MyFunc(); //使用 new 操作符,借助 MyFun 函数,就创建了一个对象
等价于:
function MyFunc(){};
var anObj = {}; //创建一个对象
MyFunc.call(anObj); //将 anObj 对象作为 this 指针调用 MyFunc 函数
-
我们就可以这样理解,JavaScript 先用 new 操作符创建了一个对象,紧接着就将这个对象作为 this 参数调用了后面的函数。其实, JavaScript 内部就是这么做的,而且任何函数都可以被这样调用!但从 “anObj = new MyFunc()” 这种形式,我们又看到一个熟悉 的身影,C++和 C#不就是这样创建对象的吗?原来,条条大路通灵山,殊途同归啊!
-
在 JavaScript 中,prototype 不但能让对象共享自己财富,而且 prototype 还有寻根问祖的天性,从而使得先辈们的遗产 可以代代相传。
function New(aClass, aParams) //通用创建函数
{ function new_() //定义临时的中转函数壳
{
aClass.Create.apply(this, aParams); //调用原型中定义的的构造函数,中转构造逻辑及构造参数
};
new_.prototype = aClass; //准备中转原型对象
return new new_(); //返回建立最终建立的对象
};
-Xmx512m -Xms512m
网友评论