分享

js 面向对象理解

 woshishenxiande 2011-05-13

js的面向对象(一)

这个话题已经很久没有人谈了.高手懒得谈,新手不敢谈.最近计划想写一套网页游戏的UI引擎,特地开贴写篇文章,与大家分享下js的面向对象特性及其实现,与大家共勉之.

主要是面向新手,因为多年前我也是新手,非常渴望有高手一谈js的面向对象.

以下总结,是代表着自己的一种理解,我希望去培养程序员的一些直觉.而不是书本化的,很深入,很晦涩的知识.首先要理解以下这些概念:

1, js中函数可以当做一种数据类型来看,而事实上他是一种Function对象的实例.

2, 函数与对象的对等性,在JS中对象一般采用函数来定义。

3, js中的变量的作用域是词法性的.

下面先对这些进行一下说明:

1, js中函数可以当做一种数据类型

在js中变量都是可变类型的,但是并不是没有类型,看如下代码:

var a=1;

var b="1";

alert(typeof a);   //number

alert(typeof b);   //string

alert(a+1);        //2

alert(b+1);        //11

通过以上代码不难看出,即使你还可以写 a="2";以改变a的类型,但是仍然应该在任何时候清楚的明白变量的类型.

这种变量类型的易变性和对象的易变性 即是js的弊端,也是它如此强大的原因.他把自由留给了你,如果可以我们可以制定自己的编写规范来约束自己而不是靠语言的实现本身.

下面说说函数的相关特性:

function Person(){

alert("a");

}

var Person=function(){

alert("b");

}

以上两种写法等价,都是定义了名为 Person的函数,函数功能也相同,即弹出一个字符. 我们可以如下这样调用:

Person();

//事实上js引擎会认为你给window增加了一个成员,以上等价于:

window.Person=function(){

...

}

//你也可以如下调用:

window.Person();

alert(typeof Person)  //function

alert(typeof window.Person)  //function    function即为Person的数据类型

这也意味着,当我们用window.open()打开一个窗口,或者在iframe等框架中要使这个方法,需要先获得定义这个方法的window对象.如:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多