龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

javascript学习笔记(二)数组和对象部分(2)

时间:2014-10-03 12:14来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: script type="text/javascript" var boy = {}; //创建一个空对象 boy.name = "小明";//按照原型对象的属性赋值 boy.age = 12; var girl = {}; girl.name = "小红"

复制代码 代码如下:

 <script type="text/javascript"> 
            var boy = {}; //创建一个空对象
                    boy.name = "小明";//按照原型对象的属性赋值
                    boy.age = 12;

            var girl = {};
                    girl.name = "小红";
                    girl.age = 10;
    </script>

这就是最简单的封装了,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果多生成几个实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出有什么联系。

构造函数模式

为了解决从原型对象生成实例的问题,Javascript提供了一个构造函数(Constructor)模式。

所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

比如boy和girl的原型对象现在就可以这样写:

复制代码 代码如下:

<script type="text/javascript"> 
        function Person(name,age){
                this.name = name;
                this.age = age;
        }
</script>

我们现在就可以生成实例对象了。

复制代码 代码如下:

<script type="text/javascript"> 
        var boy = new Person("小明","12");
        var girl = new Person("小红","10");

        alert(boy.name);  //小明
        alert(boy.age);   //12
</script>

这时Boy和girl会自动含有一个constructor属性,指向它们的构造函数。
 

复制代码 代码如下:

alert(boy.constructor == Person); //true

 alert(girl.constructor == Person); //true


Prototype模式 Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。

复制代码 代码如下:

<script type="text/javascript">
function Person(name,age){
        this.name = name;
        this.age = age;
}

Person.protype.type = "人类";

Person.protype.eat = function(){
        alert("吃米饭");
}
</script>

然后,生成实例:

复制代码 代码如下:

<script type="text/javascript">
var boy = new Person("小明","12");
var girl = new Person("小红","10");

alert(boy.type);//人类
boy.eat();//吃饭
</script>

这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率。

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接